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.