Ich lerne gerade Prolog.
Ich habe dieses rekursiven Prädikat:Probleme beim Verständnis eines bestimmten rekursiven Prolog-Prologs
add (0, Y, Y).
hinzufügen (Succ (X), Y, Succ (Z)): -
hinzufügen (X, Y, Z).
In Ordnung, so erfahrene Prolog Programmierer werden wahrscheinlich verstehen, was dieses Prädikat tut. Auf den ersten Blick scheint es nicht zu schwer zu verstehen; Wenn zwei Zahlen als erstes und zweites Argument angegeben werden, wird das Ergebnis der Addition als drittes Argument zurückgegeben. Klingt einfach? Tatsächlich.
Aber ich habe ein großes Problem zu verstehen, wie das eigentlich funktioniert. Ich habe die Beschreibung dieses Prädikats viele Male neu gelesen, aber ich kann nicht verstehen, wie es tatsächlich funktioniert. Und darum bitte ich um Hilfe.
Durch diese Abfrage:
add(succ(succ(succ(0))), succ(succ(0)), R).
Prolog instanziert und damit R
als succ(succ(succ(succ(succ(0)))))
zurückzukehren. Fein. Das muss stimmen. Ich habe jedoch keine Ahnung, warum es so ist.
Was ich Probleme Verständnis ist wie und warum Prolog den äußersten succ
Funktor aus der ursprünglichen Abfrage abstreift. Da es rekursiv ist, gibt es die Ergebnisse als Argumente an sich selbst weiter und entfernt damit den äußersten Funktor succ
, bis das Ziel vereinheitlicht werden kann. Ich verstehe, wie die succ(Z)
und das Argument R
funktioniert, aber ich bin scheinbar nicht in der Lage zu verstehen, wie es tatsächlich entfernt die äußerste succ
Funktor, wie erwähnt. Für mich scheint es, als ob es eine succ
anstatt es zu entfernen, wegen succ(X)
in der Prädikatdefinition ist.
Jede Hilfe ist sehr geschätzt. Danke im Voraus!
Wunderbare Erklärung! Vielen Dank. Akzeptierte Antwort. – Ishq