我需要一些帮助,我正在尝试创建一个例程。我需要做一个常规的,将是这个样子: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