Alle Vorkommen eines Elements aus einer Liste löschen

Beim Versuch, eine Prozedur zu schreiben, die einen Wert und eine Liste enthält, wird das gesamte Vorkommen dieses Werts in der Liste gelöscht, die geschrieben wurde:

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

Seit dercut dieser Codekann nicht Beantworten Sie richtig Fragen wie:

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

Wenn ich die Schnitte lösche:

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

es scheitert in Abfragen wie:

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

(kehrt zurücktrue , wenn die richtige Antwort istfalse).

Wie kann ich es schaffen, dass es in beiden Situationen funktioniert?

Vielleicht kann ich das überprüfenX is not T In der dritten Codezeile habe ich versucht:

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

aber es funktioniert nicht.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage