附加List1的不同于List2的元素不同的元素来自prolog

时间:2016-01-04 13:37:58

标签: prolog

我目前正在尝试查找列表L1和L2的所有元素,这些元素彼此不同并将它们附加到列表L中。

到目前为止,我尝试了以下内容:

 difference(L1, L2, L) :-
     findall(H, (member(H,L1),\+member(H, L2)), L).

但是,当我查询以下内容时,我只获得一个空列表:

 |?- difference([1,2,3],[1,2,3,4,5,6], L).

我也尝试过查询以下内容:

 |?- difference([1,2,3,4,5,6],[1,2,3], L).

有趣的是,对于这个我得到L = [4,5,6]。我如何重写我的事实,以便它也可以与第一个查询一起工作?

1 个答案:

答案 0 :(得分:0)

您的定义为“L1中不属于L2的所有元素” 你想要的是“L1 L2的所有元素都不在L1 L2”

difference(L1, L2, L) :-
     findall(H, ((member(H,L1);member(H,L2)),\+(member(H,L1),member(H,L2))), L).