我在序言中的 nrew。我正在尝试学习 zip 功能。问题是这样的。
zip(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]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经这样做了。我可以得到 1st 3rd 的结果,但不能得到 2nd 的结果。任何人都可以帮我解决第二个问题。谢谢你
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).
Run Code Online (Sandbox Code Playgroud)
我如何定义这个功能在哪里;allsame(L):列表 …
allsame([]).
allsame([X]).
allsame([X,X|Z]) :-
allsame([X|Z]).
Run Code Online (Sandbox Code Playgroud)
如何更改以获得下面的结果?
alldifferent(L): The elements in L are all different.
?- alldifferent([a, b, b, c, d]).
false
?- alldifferent([a, b, c, d, e]).
true
Run Code Online (Sandbox Code Playgroud)