#prolog #successor-arithmetics
#пролог #преемник-арифметика
Вопрос:
У меня есть следующая процедура для натурального числа SWI-prolog:
natural_number(0).
natural_number(s(X)) :- natural_number(X).
Теперь я хочу выполнить рекурсивный вызов, который остановится, когда мы достигнем 0.
Мое натуральное число представлено — s(0)=0, s(s(0))=1, s(s(s(0)))=2, etc
Итак, я определяю:
recommend(A, B, natural_number(0)) :-
dosomeFINITEfunction (a,b).
recommend(a,b,mynumber):-
dosomeFINITEfunction(a,b),
recommend (a,b, natural_number(mynumber)).
и вызовите с: 3,5,s(0).
Но это выдает мне ошибку: out of local stack
.
В чем проблема? Спасибо.
Комментарии:
1. Кто-нибудь знает ответ, пожалуйста? Вам нужна дополнительная информация?
2. Том, можешь ли ты быть более точным в предоставленном тобой фрагменте? У меня сложилось впечатление, что это очень неточно. В первом правиле вашего второго фрагмента есть A, B, а также a, b. Это то, что есть в вашем коде? У вас действительно есть natural_number (0) в первом правиле или у вас там s (0)?
Ответ №1:
natural_number(s(0), 0).
natural_number(s(s(X)), N) :- natural_number(s(X), S), N is S 1.