La notación del sucesor de Prolog produce un resultado incompleto y un bucle infinito

Empiezo a aprender Prolog y primero aprendí sobre la notación del sucesor.

Y aquí es donde descubro cómo escribir axiomas de Peano en Prolog.

Vea la página 12 delPDF:

<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>

Pongo las reglas de multiplicación en Prolog. Entonces hago la consulta:

<code>?- prod(X,Y,s(s(s(s(s(s(0))))))).
</code>

Lo que significa encontrar el factor de 6 básicamente.

Aquí están los resultados.

<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>

Este resultado tiene dos problemas:

No se muestran todos los resultados, tenga en cuenta que falta el resultado X = 6, Y = 1.No se detiene a menos que presione Ctrl + C y luego elija abortar.

Entonces ... mis preguntas son:

¿Porqué es eso? Intenté cambiar "prod" y "sum". El código resultante me da todos los resultados. Y de nuevo, ¿POR QUÉ es eso? Sin embargo, todavía está muerto.¿Cómo resolver eso?

Leí la otra respuesta en el bucle infinito. Pero apreciaría la respuesta de alguien basándose en este escenario. Me ayuda mucho.

Respuestas a la pregunta(2)

Su respuesta a la pregunta