1

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),!.
4

1 回答 1

3

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

并考虑到来自@mog 的评论,应在需要时使用剪切。当然,决定何时需要可能很困难......

于 2012-05-31T08:50:26.643 回答