Die Prolog-Nachfolgernotation liefert ein unvollständiges Ergebnis und eine Endlosschleife
Ich lerne Prolog und lerne zuerst die Nachfolgernotation.
Und hier erfahre ich, wie ich Peano-Axiome in Prolog schreibe.
Siehe Seite 12 derPDF:
<code>sum(0, M, M). sum(s(N), M, s(K)) :- sum(N,M,K). prod(0,M,0). prod(s(N), M, P) :- prod(N,M,K), sum(K,M,P). </code>
Ich habe die Multiplikationsregeln in Prolog geschrieben. Dann mache ich die Abfrage:
<code>?- prod(X,Y,s(s(s(s(s(s(0))))))). </code>
Was bedeutet, im Grunde den Faktor 6 zu finden.
Hier sind die Ergebnisse.
<code>X = s(0), Y = s(s(s(s(s(s(0)))))) ? ; X = s(s(0)), Y = s(s(s(0))) ? ; X = s(s(s(0))), Y = s(s(0)) ? ; infinite loop </code>
Dieses Ergebnis weist zwei Probleme auf:
Es werden nicht alle Ergebnisse angezeigt. Beachten Sie, dass das Ergebnis X = 6, Y = 1 fehlt.Es hört erst auf, wenn ich Strg + C und dann Abbrechen wähle.Also ... meine Fragen sind:
Warum das? Ich habe versucht, "prod" und "sum" umzuschalten. Der resultierende Code gibt mir alle Ergebnisse. Und nochmal, WARUM ist das so? Es ist immer noch Dead-Loops.WIE kann man das lösen?Ich las die andere Antwort auf Endlosschleife. Aber ich würde es begrüßen, wenn jemand anhand dieses Szenarios antworten würde. Es hilft mir sehr.