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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage