(これはコースワークの質問ではありません。私自身の個人的な学習です。)
リストから要素を削除するために Prolog で演習を行おうとしています。これが私のコードです:
deleteall([],X,[]).
deleteall([H|T],X,Result) :-
H==X,
deleteall(T,X,Result).
deleteall([H|T],X,[H|Result]) :- deleteall(T,X,Result).
テストすると、最初に良い答えが得られます (つまり、すべての X が削除されます)。しかし、バックトラックにより、X のインスタンスの一部が削除された、またはまったく削除されていないリストの他のすべてのバリアントが提供されます。
なぜこれが必要なのですか?H==X が最後の句まで落ちるのはなぜですか?