我有对的列表:[{1,},{2,B},{3,C},{4,d}]Prolog的:从对的列表中提取的单个列表
我怎样才能提取每一对的第二个元素,并创建一个单独的列表?
所以:[A,B,C,d]
对不起,我是新来的Prolog,和周围一看答案,但无法找到它。
我有对的列表:[{1,},{2,B},{3,C},{4,d}]Prolog的:从对的列表中提取的单个列表
我怎样才能提取每一对的第二个元素,并创建一个单独的列表?
所以:[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).
但是你可以自己决定w帽子效果最好,只要记住:
?- write_canonical({1,a}).
{}(','(1,a))
true.
?- write_canonical(1-a).
-(1,a)
true.
好材料上序言,其中包括:
随着SWI-Prolog的唯一,你可以做
:- use_module(library(lambda)).
extract_second(In, Out) :-
maplist(\X^Y^(X = {_,Y}), In, Out).
你可以得到库(拉姆达)有:http://www.swi-prolog.org/download/pack/lambda-1.0.0.tgz
给定[此处](http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord#implementation)的定义适用于任何符合Prolog的系统 - 包括SICStus! – false
对不起,这是一个错误。你说得对,[1-a,2-b,3-c,4-d]就是我想要的。顺便说一句,谢谢你的参考。 – Hydar77