product([], 1). product([H|T], X) :- product(T, Y), X is H * Y. factorial(N, R) :- numlist(2, N, Ns), product(Ns, R).