Prolog:从对列表中提取单个列表

时间:2013-11-14 12:16:24

标签: lambda prolog

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

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

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

抱歉,我是Prolog的新手,并且环顾四周寻找答案,但找不到答案。

2 个答案:

答案 0 :(得分:3)

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

[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上的好材料,包括:

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

答案 1 :(得分:2)

仅限SWI-Prolog,您可以

:- use_module(library(lambda)).
extract_second(In, Out) :-
    maplist(\X^Y^(X = {_,Y}), In, Out).

你可以在那里获得图书馆(lambda):http://www.swi-prolog.org/download/pack/lambda-1.0.0.tgz