Ich versuche zu ermitteln, welche Implementierung von Mitglied effizienter ist, indem Sie die Back-Chaining-Prozedur von beiden zeichnen.Prolog Standard Mitglied/2 vs Mitglied/2 implementiert mit append?
Standardimplementierung:
isMember(X,[X|Tail]).
isMember(X,[H|Tail]) :- isMember(X,Tail).
Anfügen Umsetzung: (Aus meiner Klasse Noten)
appendMember(X,List).
appendMember(X,List) :- myAppend(List1,[X|List2],List).
myAppend([],List,List).
myAppend([H|List1],List2,[H|Result]) :- myAppend(List1,List2,Result).
Wenn ich den Tracer auf TK Eclipse erhalte ich die erwartete Ausgabe für die Standard-Implementierung mit der rekursiven ruft auf, aber die Append-Implementierung wird sofort erfolgreich beendet.
Ich frage mich, warum das ist und wie man die Back-Chaining-Verfahren für die Append-Methode zu zeichnen.
Vielen Dank im Voraus!
Noch effizienter ist ['memberd/2'] (https://stackoverflow.com/a/21971885/772868) – false