单独的清单A / B - > B swi-prolog

时间:2011-02-01 08:41:07

标签: list prolog

我有一个列表[2 / 4 ,3 / 6 ,1 / 2 ,7 / 5 ]我想创建一个仅包含第二个数字的列表[ 4 6 2 5 ]。

我在想这样的事情:

newlist(L,L2):-
   newlist(L,A/B),
   newlist(A/B,B),
   newlist(B,L2).

那没用,有什么建议吗?

3 个答案:

答案 0 :(得分:3)

为单个元素定义谓词:

pair_to_2nd(_/B, B).

现在将此谓词应用于列表:

?- maplist(pair_to_2nd, [2/4, 3/6, 1/2, 7/5], L).
L = [4, 6, 2, 5].

答案 1 :(得分:3)

listDenom([ ],[ ]).
listDenom([_/D|T],[D|V]) :- listDenom(T,V).

答案 2 :(得分:-4)

以下是使用string_to_list的解决方案。

splitList(A) :-  
    string_to_list(A, [_,_,_,A1,_,_,_,B1,_,_,_,C1,_,_,_,D1,_]),  
    string_to_list(A2, [A1]),  
    string_to_list(B2, [B1]),  
    string_to_list(C2, [C1]),  
    string_to_list(D2, [D1]),  
    write([A2,B2,C2,D2]).

示例:

?- splitList('[2/4,3/6,1/2,7/5]').
[4,6,2,5]
true.