42 lines
896 B
Prolog
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).
|