林在序言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