プロローグにはかなり新しい。私は 2 つのリストを提供し、2 つの違いを返してもらうようにしています。2 番目のリストには、バインドされた変数とバインドされていない変数を含めることができます。これをトレースしてみましたが、最後まで再帰的に実行され、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),!.