prolog中的多集差分函数

prolog中的多集差分函数,prolog,Prolog,我想计算两个列表之间的差异- 这是我的尝试 difference(X, [], X). difference(H,[S|T],H):- del(S, H, H2), difference(H2, T, H2). del(Y,[Y],[]). del(X,[X|L1],L1). del(X,[Y|L],[Y|L1]):-del(X,L,L1). 但当我称之为差异时([a,a,b,b,c,d,d],[b,b,c,c,d,d,d],X)。false。它返回false,而不是给出差值 对于这种情

我想计算两个列表之间的差异-
这是我的尝试

difference(X, [], X).
difference(H,[S|T],H):-
 del(S, H, H2),
 difference(H2, T, H2).

del(Y,[Y],[]).
del(X,[X|L1],L1).
del(X,[Y|L],[Y|L1]):-del(X,L,L1).
但当我称之为差异时([a,a,b,b,c,d,d],[b,b,c,c,d,d,d],X)。false。它返回false,而不是给出差值

对于这种情况,答案应该是
{a,a,b}

尝试以下代码:

difference(A, [], A).
difference(A, [X|C], D) :- del(X, A, B), difference(B, C, D).

del(_, [], []).
del(X, [X|B], B).
del(X, [Y|B], [Y|C]) :- X \= Y, del(X, B, C).
运行示例:

?- difference([a,a,b,b,b,c,d,d],[b,b,c,c,c,d,d,e],X).
X = [a, a, b] ;
false.

一个提示:看看difference/3的第一个和最后一个参数!它们总是一样的。那么第二个参数包含两个额外的“c”和一个“e”的事实呢?结果不应该是
[a,a,b,c,c,e]