Excluindo todas as ocorrências de um elemento de uma lista

Tentando escrever um procedimento que forneça um valor e uma lista, ele exclui toda a ocorrência desse valor na lista que escreveu:

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 ocut este códigonão podes responder corretamente a consultas como:

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

Se eu excluir os 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).

falha em consultas como:

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

(retornatrue , quando a resposta correta éfalse).

Como posso fazer isso funcionar em ambas as situações?

Talvez eu possa verificar issoX is not T na terceira linha de código, tentei:

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

mas não funciona.

questionAnswers(4)

yourAnswerToTheQuestion