林在序言nrew。即时通讯尝试学习压缩功能。问题是这样的。Prolog的压缩功能
拉链(L1,L2,X):该列表X由“拉上”第一2个参数构成。
的结果应该是这样的:
?- zip([a, b, c], [x, y, z], X).
L = [a, x, b, y, c, z]
?- zip([a, b], [x, y, z], X).
false
?- zip([a, b, c, d], X, [a, p, b, q, c, r, d, s]).
X = [p, q, r, s]
我有这个迄今所做。 我可以得到第一个第三的结果,但不是第二个。任何人都可以帮助我解决第二个问题。谢谢
zip([X],[Y],[X,Y]).
zip([], [], []).
zip([X|Xs], [Y|Ys], [X,Y|Zs]) :-
zip(Xs,Ys,Zs).
zip([X|Xs],[],[X|Xs]).
zip([Y|Ys],[],[Y|Ys]).
zip(Xs, [], Xs).
zip([], Ys, Ys).
我该如何定义这个函数? allsame(L):列表L包含相同的元素。 我应该得到这个。
?- allsame([b, b, b]).
true
?- allsame([c, c, c, Y, c, c, X, c]).
X = c, Y = c
如果给出前两个参数,那么谓词应该失败是很常见的。而且,这个名字更像是“隔行”或类似的。 'zip'通常被认为是一个'map'函数 – false