首页 > 解决方案 > 多集序言中的差分函数

问题描述

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

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).

但是当我调用它时 difference([a,a,b,b,b,c,d,d],[b,b,c,c,c,d,d,e],X). false.它返回 false 而不是给出差异。
对于这种情况,答案应该是{a, a, b}

标签: prolog

解决方案


试试下面的代码:

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.

推荐阅读