У меня есть следующий фрагмент кода пролога:
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).