A notação do sucessor do Prolog produz um resultado incompleto e um loop infinito

Eu começo a aprender Prolog e primeiro aprendi sobre a notação sucessora.

E é aqui que descubro a escrita dos axiomas de Peano no Prolog.

Veja a página 12 doPDF:

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

Eu coloquei as regras de multiplicação no Prolog. Então eu faço a consulta:

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

O que significa encontrar o fator de 6 basicamente.

Aqui estão os 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 tem dois problemas:

Nem todos os resultados são mostrados, observe que o resultado X = 6, Y = 1 está faltando.Ele não pára a menos que eu Ctrl + C, em seguida, escolha abortar.

Então ... minhas perguntas são:

Por que é que? Eu tentei mudar "prod" e "soma" ao redor. O código resultante me dá todos os resultados. E mais uma vez, por que isso? Ainda assim, faz um loop morto.COMO resolver isso?

Eu li a outra resposta em loop infinito. Mas eu apreciaria alguém responder baseando-se neste cenário. Isso me ajuda muito.

questionAnswers(2)

yourAnswerToTheQuestion