predicates
count(real)
clauses
count(N):-
write(N),nl,
NewN=N+1,
count(NewN).
Эта процедура count(N) –является хвостовой рекурсией, которая вызывает себя без резервирования нового стекового фрейма, и потому не истощает запас памяти, в конечном итоге произойдет целочисленное переполнение, но остановки из-за нехватки памяти не будет.
Введение условия, ограничивающего бесконечную рекурсию:
Листинг 5.10.Ограничение бесконечной рекурсии
predicates
count(integer)
check(integerl)
clauses
count(N):-
write(N),nl,
NewN=N+1,
сheck(NewN),
count(NewN).
check(Z):-Z<5.
goal
clearwindow,
write(“result:”),nl,
count(1).
Замечание:
В Прологе мы не можем изменить значение переменной, поэтому создаем новую переменную NewN.
Добавим еще одно предложение после рекурсивного вызова