Натуральное число в SWI-prolog и рекурсивная процедура

#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.