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.