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.