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

У меня следующая процедура для натурального числа - это SWI-пролог:

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.

В чем проблема? Спасибо.


person Tom    schedule 04.06.2011    source источник
comment
Кто-нибудь знает ответ, пожалуйста? Вам нужна дополнительная информация?   -  person Tom    schedule 06.06.2011
comment
Том, не могли бы вы уточнить предоставленный вами фрагмент? У меня сложилось впечатление, что это очень неточно. В первом правиле вашего второго фрагмента есть A, B, а также a, b. Это то, что есть в вашем коде? У вас действительно есть natural_number (0) в первом правиле или у вас там s (0)?   -  person horsh    schedule 06.06.2011