I have the following snippet of prolog code:
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).
Can somebody please explain why the following command causes a stack overflow? Thanks in advance.
fact(6).