我一直在嘗試寫一些代碼,需要值的列表,並刪除其中僅在列表中一次,不重複的所有值:序言除去非複製
dbltaker([], []).
dbltaker([H | X], Y):-
\+mem(H, X),
dbltaker(X, Y).
dbltaker([H | X], [H | Y]):-
mem(H, X), !,
dbltaker(X, Y).
dbltaker([H | X], [H | Y]):-
mem(H, Y),
dbltaker(X, Y).
mem(H, [H | _]).
mem(H, [_ | T]):-
mem(H, T).
麻煩我一直有的是,在將非重複移動到另一個列表後,它的重複不再是重複的,因此不會移動到列表中。例如,列表[1,1,1,2,2,3]給出[1,1,2]作爲輸出,因爲最後一個和兩個不被認爲是重複的,因爲它們不再是它們的成員尾巴,我無法檢查它們是否是新列表的成員,因爲它尚未實例化。
有沒有辦法解決這個問題?
謝謝。
這是一個賦值/什麼限制,你有 - 你允許使用例如。 nth1或其他列表/設置相關的內置插件,或者像findall/setof這樣的收藏夾? – magus
限制是算術和削減以外的其他內置函數。 – Qiri
[Prolog只能刪除唯一元素]的可能的重複(http://stackoverflow.com/questions/21971037/prolog-removing-unique-elements-only) – lurker