У меня есть следующий фрагмент кода пролога:Почему эта команда вызывает переполнение стека в прологе?
num(0).
num(X) :- num(X1), X is X1 + 1.
fact(0,1) :-!.
fact(X,Y) :- X1 is X-1, fact(X1,Y1), !, Y is Y1 * X.
fact(X) :- num(Y), fact(Y,X).
Может кто-нибудь, пожалуйста, объясните, почему следующая команда вызывает переполнение стека? Заранее спасибо.
fact(6).
Возможно, вам следует указать на то, чтобы новобранец, что проблема, которую вы проанализировали можно предотвратить путем добавления 'X> 0' к корпусу 2-го пункта для ** факта/2 **. – hardmath