我目前正在尝试查找列表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]。我如何重写我的事实,以便它也可以与第一个查询一起工作?
答案 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).