Notacja następcy Prologu daje niekompletny wynik i nieskończoną pętlę

Zaczynam uczyć się Prologu i najpierw dowiedziałem się o notacji następcy.

I tu właśnie dowiaduję się o pisaniu aksjomatów Peano w Prologu.

Patrz strona 12PDF:

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

Umieszczam reguły mnożenia w Prologu. Następnie wykonuję zapytanie:

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

Co oznacza znalezienie współczynnika 6 w zasadzie.

Oto wyniki.

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

Ten wynik ma dwa problemy:

Nie wszystkie wyniki są pokazane, należy zauważyć, że brakuje wyniku X = 6, Y = 1.Nie zatrzymuje się, dopóki I Ctrl + C nie wybierze przerwania.

Więc ... moje pytania to:

Dlaczego? Próbowałem przełączać „prod” i „sum” dookoła. Wynikowy kod daje mi wszystkie wyniki. I znowu, dlaczego tak jest? Mimo to wciąż żyje.JAK to rozwiązać?

Przeczytałem drugą odpowiedź na nieskończonej pętli. Byłbym jednak wdzięczny za odpowiedź na podstawie tego scenariusza. To mi bardzo pomaga.

questionAnswers(2)

yourAnswerToTheQuestion