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:
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).
Umieszczam reguły mnożenia w Prologu. Następnie wykonuję zapytanie:
?- prod(X,Y,s(s(s(s(s(s(0))))))).
Co oznacza znalezienie współczynnika 6 w zasadzie.
Oto wyniki.
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
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.