La suppression de toutes les occurrences d'un élément dans une liste

Essaie d'écrire une procédure qui donne une valeur et une liste, il supprime toutes les occurrences de la valeur dans la liste a écrit:

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

Depuis le cut ce code ne peut pas répondre correctement les requêtes comme:

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

Si je supprime les coupes:

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

d'échec des requêtes comme:

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

(renvoie true , lorsque la réponse correcte est false).

Comment puis-je faire cela fonctionne dans les deux situations?

Je peux peut-être vérifier que X is not T dans la troisième ligne de code, j'ai essayé:

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

mais il ne fonctionne pas.

InformationsquelleAutor Aslan986 | 2012-08-29