Eliminar todas las apariciones de un elemento de una lista

Al intentar escribir un procedimiento que, dado un valor y una lista, elimina toda la aparición de ese valor en la lista que escribió:

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

Desde elcut este códigono poder Responde correctamente las consultas como:

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

Si borro los cortes:

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

falla en consultas como:

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

(devolucionestrue , cuando la respuesta correcta esfalse).

¿Cómo puedo hacer que funcione en ambas situaciones?

Tal vez pueda comprobar esoX is not T En la tercera línea de código, probé:

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

Pero no funciona.

Respuestas a la pregunta(4)

Su respuesta a la pregunta