Натуральное число в SWI-прологе и рекурсивной процедуре - PullRequest
2 голосов
/ 04 июня 2011

У меня следующая процедура для натурального числа - это 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.

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

1 Ответ

2 голосов
/ 02 декабря 2011
natural_number(s(0), 0).
natural_number(s(s(X)), N) :- natural_number(s(X), S), N is S + 1.
...