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.