% From "The Art of Prolog" by Sterling and Shapiro

%::::::::::::::
%ss8.2
%::::::::::::::

factorial1(N,F) :- N > 0, N1 is N-1, factorial1(N1,F1), F is N*F1.
factorial1(0,1).

%::::::::::::::
%ss8.3
%::::::::::::::

factorial2(N,F) :- factorial2(0,N,1,F).
factorial2(I,N,T,F):-
   I < N, I1 is I+1, T1 is T*I1, factorial2(I1,N,T1,F).
factorial2(N,N,F,F).

%::::::::::::::
%ss8.4
%::::::::::::::

factorial3(N,F) :- factorial3(N,1,F).
factorial3(N,T,F):-
   N > 0, T1 is T*N, N1 is N-1, factorial3(N1,T1,F).
factorial3(0,F,F).
