Prolog:解压缩对列表

时间:2013-05-08 01:01:53

标签: prolog

所以,我必须创建一个谓词,解压缩(L,R,P),其中P是一对列表(例如:P = [[1,2],[3,4]]。L必须是一个包含每对中第一个元素的新列表,而R是一个包含每对中第二个元素的新列表。

这就是我所拥有的:

unzip([],[],[]).
unzip([H1|T1],[H2|T2],[HL,HR|T]) :-
   H1 = HL,
   H2 = HR,
   unzip(T1,T2,T).

除非对数是奇数,否则这是有效的。我不知道这是怎么回事,有什么建议吗?

编辑:想出来。如果有人好奇,这是我的解决方案:

unzip([],[],[]).
unzip([H1|T1],[H2|T2],[[HL,HR]|T]) :-
   H1 = HL,
   H2 = HR,
   unzip(T1,T2,T).

1 个答案:

答案 0 :(得分:5)

你的解决方案是正确的,但你可以而且应该在头脑中使用统一:

unzip([], [], []).
unzip([L|Ls], [R|Rs], [[L,R]|Ps]) :- unzip(Ls, Rs, Ps).