nus/cs2104/labs/family.pl

42 lines
896 B
Prolog

parent(a, b).
parent(a, c).
parent(b, d).
parent(b, e).
parent(c, f).
parent(c, g).
parent(f, h).
parent(i,j).
parent(f, i).
ancestor(X, Y) :- parent(X, Y).
ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y).
ancestor(a, X).
parent(a, ??)
factorial(1, 1).
factorial(N, F) :- N > 1, N1 is N - 1, factorial(N1, F1), F is F1 * N.
faciter(1, Res, Res).
faciter(N, Acc, Res) :- N > 1, N1 is N -1, Acc1 is N * Acc, faciter(N1, Acc1, Res).
fib(0, 0).
fib(1, 1).
fib(N, F) :- N > 1, N1 is N-1, N2 is N-2, fib(N1, F1), fib(N2, F2), F is F1 + F2.
fibiter(X, X, F1, F2, F1).
fibiter(X, N, F1, F2, Result) :- X < N, X1 is X + 1, Aux is F1 + F2, fibiter(X1, N, F2, Aux, Result).
head([H|_], H).
tail([_|T], T).
member(X, [X|_]).
member(X, [_|T]) :- member(X, T).
append([], L, L).
append([H|T], L, [H|R]) :- append(T, L, R).
reverse([], []).
reverse([H|T], R) :-
reverse(T, R1), append(R1, [H], R).