lambda - Prolog:从成对的列表中提取单个列表

标签 lambda prolog

我有一个对列表:[{1, a}, {2, b}, {3, c}, {4, d}]

如何提取每对的第二个元素并将其设为单独的列表?

所以:[a,b,c,d]

抱歉,我是 Prolog 新手,并四处寻找答案,但找不到。

最佳答案

您显示的不是对列表。这是:

[1-a, 2-b, 3-c, 4-d].

通过此列表,您可以执行以下操作:

?- pairs_values([1-a, 2-b, 3-c, 4-d], V).
V = [a, b, c, d].

?- pairs_keys([1-a, 2-b, 3-c, 4-d], K).
K = [1, 2, 3, 4].

并且明确执行的谓词是:

seconds([], []).
seconds([_A-B|Pairs], [B|Secs]) :-
    seconds(Pairs, Secs).

如果你坚持的话,当然可以:

secs([], []).
secs([{_A, B}|Pairs], [B|Secs]) :-
    secs(Pairs, Secs).

但是您可以自己决定什么最有效,请记住:

?- write_canonical({1,a}).
{}(','(1,a))
true.

?- write_canonical(1-a).
-(1,a)
true.

关于 Prolog 等方面的好 Material :

  • Amzi Inc. Prolog 中的冒险(网络)
  • 立即学习 Prolog! (网络)
  • “Prolog 的艺术”,Sterling 和 Shapiro(书)。

关于lambda - Prolog:从成对的列表中提取单个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19977404/

相关文章:

prolog - 从 Prolog 中的列表中删除连续的重复项

c# - Prolog C# 接口(interface)从文件中撤回

lambda - Java 8 - 如何使用流收集器对 map 列表进行分组和求和

c# - 我应该使用什么设计模式来为 Linq 搜索屏幕创建查询和文本框之间的简单绑定(bind)映射?

c++ - GCC 在 lambda 函数中通过引用错误地捕获全局变量?

prolog - 用合取范式推理

prolog - 处理未绑定(bind)的变量和列表

file - 区别 yap 和 swi-prolog 阅读规范列表

c++ - 在 lambda 中使用类模板参数时出现编译错误

java - Lambda 是否完全废除了 java 8 中匿名内部类的用法?