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.