Prolog:解压缩对列表

Ada*_*all 2 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).
Run Code Online (Sandbox Code Playgroud)

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

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

unzip([],[],[]).
unzip([H1|T1],[H2|T2],[[HL,HR]|T]) :-
   H1 = HL,
   H2 = HR,
   unzip(T1,T2,T).
Run Code Online (Sandbox Code Playgroud)

小智 5

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

unzip([], [], []).
unzip([L|Ls], [R|Rs], [[L,R]|Ps]) :- unzip(Ls, Rs, Ps).
Run Code Online (Sandbox Code Playgroud)