fact(0, 1). fact(1, 1). fact(N, F) :- integer(N), N > 1, N1 is N - 1, fact(N1, F1), F is F1 * N. factorial(X, 1) :- X =:= 1. factorial(X, Fact) :- X > 1, NewX is X - 1, factorial(NewX, NF), Fact is X * NF. gcd(N1, N2, GCD) :- N1 < N2, euclid(N2, N1, GCD). gcd(N1, N2, GCD) :- N2 > 0, N1 > N2, euclid(N1, N2, GCD). euclid(N, 0, N). euclid(N1, N2, GCD) :- N2 > 0, Q is N1 // N2, R is N1 - (N2 * Q), euclid(N2, R, GCD).