我需要一些幫助,我正在嘗試創建一個例程。我需要做一個常規的,將是這個樣子:Prolog差異例程
difference([(a,b),(a,c),(b,c),(d,e)],[(a,_)],X).
X = [(b,c),(d,e)].
我真的需要在這一個幫助..
我寫了一個方法,到目前爲止,可以刪除第一次出現,它認爲。但是我需要它刪除所有的事件。以下是我迄今爲止...
memberOf(A, [A|_]).
memberOf(A, [_|B]) :-
memberOf(A, B).
mapdiff([], _, []) :- !.
mapdiff([A|C], B, D) :-
memberOf(A, B), !,
mapdiff(C, B, D).
mapdiff([A|B], C, [A|D]) :-
mapdiff(B, C, D).
我採取這種代碼列表(減去)。
我不完全明白它的作用,但我知道它幾乎是我想要的。我沒有使用減法,因爲我的最終代碼必須與WIN-Prolog兼容......我正在SWI Prolog上測試它。
您的代碼適用於我(在SWI-Prolog和GNU-Prolog中)。我不知道WIN-Prolog,所以我不能幫你。 – Stephan202 2009-12-09 18:52:25
它的工作原理,但它並沒有消除所有的A的發生。它只消除了第一個。 – SteveW 2009-12-09 18:55:00
你是對的。不知何故,我看起來錯了(?)。我認爲問題在於成員檢查執行統一,結果在第一次測試後'(a,_)'成爲'(a,b)',這將不再與'(a,c)'匹配。我正在考慮一個不錯的解決方案... – Stephan202 2009-12-09 19:06:43