2013-05-08 58 views
2

所以,我必须创建一个谓词,解压缩(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). 
+3

随意使这是一个答案,并接受它。你以后可能最终会帮助别人。 – joneshf 2013-05-08 01:30:21

+2

请注意,你写的也是'zip' – false 2014-01-24 15:41:14

回答

5

你的解决方案是正确的,但你可以,也应该在头部使用统一:

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