Prolog差异3套​​(S1 \ S2)\ S3

时间:2016-01-07 20:47:56

标签: list prolog set set-difference

我有2套差异的工作谓词

difference([],Y,[]).
difference([X|R],Y,Z) :-
    member(X,Y),
    !,
    difference(R,Y,Z).
difference([X|R],Y,[X|Z]) :-
    difference(R,Y,Z).

但我想为3套做类似的事情,我无法弄明白 difference(S1,S2,S3,result)导致(S1 \ S2)\ S3

1 个答案:

答案 0 :(得分:1)

你基本上已经自己说过了:拿公式(S1 \ S2)\ S3 ,用 T1替换 S1 \ S2 (暂时的),然后得到的公式是 T1 \ S3

所以现在把它放到代码中:

difference(S1,S2,S3,Result) :-
    difference(S1,S2,T1),       %T1 = S1\S2
    difference(T1,S3,Result).   %Result = T1\S3=(S1\S2)\S3