嘿,我想追加兩個列表沒有 「雙重」 成員序言,追加無repititions
例如
A = [a, b, c]
B = [x, c, q]
然後 - >
append2(A,B,P)
P= [a,b,c,x,q]
我寫這篇文章代碼,但它不起作用...
not_member(_, []).
not_member(X, [Y|Ys]) :- X \= Y, not_member(X, Ys).
append2(A, [], A).
append2([], A, A).
append2([h1|ls], B, [h1|P]) :- not_member(h1, B), !, append2(ls, B, P).
append2([h1|ls], B, P) :- member(h1, P), append2(ls, B, P).
感謝您的幫助:)
一個主要問題是您正在使用原子而不是變量。 'h1'是一個原子(不可變)。 H1將是一個變量(以大寫字母開頭)。你的'ls'也一樣。你需要'LS'或'Ls'。解決這個問題,並看看你有多遠。也不清楚爲什麼你必須定義'not_member'。在你的'append2'中,你可以使用'\ + member(...)'。至少,你可以定義'not_member(X,L): - \ + member(X,L).'。 – lurker
嘿,我做了更改,否爲: append2([a,b,c],[c],P)。我得到了: P = [a,b,c]。 但對於更大的輸入,如: append2([a,b,c],[b,x,a,u],P)。 我得到了: 錯誤:超出全局堆棧 –
這意味着你的代碼中有循環邏輯。看起來@gusbro給了你一個重寫。 – lurker