Почему эта команда вызывает переполнение стека в прологе?

У меня есть следующий фрагмент кода пролога:

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).
7
задан false 15 November 2012 в 11:48
поделиться