Я начинаю изучать Prolog и сначала узнал о нотации преемника.
И вот где я узнаю о написании аксиом Пеано в Прологе.
См. стр. 12 PDF:
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).
Я ввел правила умножения в Prolog. Затем я делаю запрос:
?- prod(X,Y,s(s(s(s(s(s(0))))))).
Это означает, что в основном найти коэффициент 6.
Вот результаты.
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
Этот результат имеет две проблемы:
- Не все результаты показаны, обратите внимание, что результат X = 6, Y = 1 отсутствует.
- Это не останавливается, если я не Ctrl + C, а затем выберите abort.
Итак... мои вопросы:
- ПОЧЕМУ? Я попытался переключить "prod" и "sum". Полученный код дает мне все результаты. И снова, ПОЧЕМУ? Тем не менее, он все еще мертв.
- КАК разрешить это?
Я читаю другой ответ на бесконечный цикл. Но я был бы признателен, если кто-то ответит на этот сценарий. Это очень помогает мне.