私がしたいのは、別のリストで指定されたリストの一部を削除することです。
?- deleteSome([1,4,3,3,2,2],[1,2,4],Z).
Z = [3,3,2].
私は最初に次のように定義しました。問題ありません。
deleteOne(X, [X|Z], Z).
deleteOne(X, [V|Z], [V|Y]) :-
X \== V,
deleteOne(X,Z,Y).
そうすると、以下は期待通りに動作しません。
deleteSome([], [], _).
deleteSome([X|Xs], Y, Zs) :-
deleteSome(Xs, Y, [X|Zs]).
deleteSome([X|Xs], Y, Zs) :-
member(X,Y),
deleteOne(X,Y,Y),
deleteSome(Xs, Y, Zs).