我有一个对列表:[{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/