Prolog:两个列表的区别

时间:2012-05-30 21:03:02

标签: list prolog

Prolog很新。我正试图给出两个清单,并将两者的差异归还给我。第二个列表中可以包含绑定变量和未绑定变量。我已经尝试过跟踪这个并且它一直在递归并在NewL中给我一个正确的列表,但是在回来的路上它否定了我所做的所有删除。出了什么问题?谢谢你的帮助!

% Find difference between two lists, return result in Difference
difference(List,[H|T],Difference) :-   % When H is unbound var, use Tail
    var(H),!,difference(List,T,Difference),!.

difference(List,[H|T],Difference) :- % When H is bound var, remove from List.
    subtract(List,[H],NewL),
    difference(NewL,T,Difference),!.

1 个答案:

答案 0 :(得分:2)

假设减去/ 3来自SWI-Prolog library,因此是正确的,你只剩下一种可能性:你忘了在第二个参数上声明基本情况,这会驱动递归。

考虑到@mog的评论,切割应该在需要时使用 。当然,要确定何时需要 可能会很困难......