Удаление всех вхождений элемента из списка

Пытаясь написать процедуру, которая дала бы значение и список, он удаляет все вхождения этого значения в список и пишет:

delMember(X, [], []) :- !.
delMember(X, [X|Xs], Y) :- !, delMember(X, Xs, Y).
delMember(X, [T|Xs], Y) :- !, delMember(X, Xs, Y2), append([T], Y2, Y).

Посколькуcut этот кодcannot правильно отвечать на запросы, такие как:

delMember(Y, [1,2,3,1,2,3,1,2,3], [1, 2, 1, 2, 1, 2 ]).

Если я удалю порезы:

delMember(X, [], []).
delMember(X, [X|Xs], Y) :- delMember(X, Xs, Y).
delMember(X, [T|Xs], Y) :- delMember(X, Xs, Y2), append([T], Y2, Y).

это терпит неудачу в запросах как:

delMember(Y, [1,2,3,1,2,3,1,2,3], [1,2,3,1,2,3,1,2,3]).

(возвратыtrue когда правильный ответfalse).

Как я могу сделать это работает в обеих ситуациях?

Может быть, я могу проверить этоX is not T в третьей строке кода я попытался:

delMember(X, [T|Xs], Y) :- not(X = T), delMember(X, Xs, Y2), append([T], Y2, Y).

Но это не работает.

Ответы на вопрос(4)

Ваш ответ на вопрос