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),!.
答案 0 :(得分:2)
假设减去/ 3来自SWI-Prolog library,因此是正确的,你只剩下一种可能性:你忘了在第二个参数上声明基本情况,这会驱动递归。
考虑到@mog的评论,切割应该在需要时使用 。当然,要确定何时需要 可能会很困难......