[Précedent][Fin-Préc.][Fin][Haut]
%%% - Section 1.1 - %%%
max(X, Y, Z) :- X < Y, !, Z = Y.
max(X, _, X).
is_ord([]).
is_ord([_]).
is_ord([X,Y|T]) :-
X =< Y,
is_ord([Y|T]).
insere([], [X], X).
insere([H|T], [X,H|T], X) :-
X < H,
!.
insere([H|T], [H|Y], X) :-
insere(T, Y, X).
tri_insertion(X, Y) :-
tri_insertion_acc(X, Y, []).
tri_insertion_acc([], L, L).
tri_insertion_acc([H|T], L, Acc) :-
insere(Acc, Acc2, H),
tri_insertion_acc(T, L, Acc2).
%%% - Section 1.2 - %%%
aplatir([], []).
aplatir([X], [X]).
aplatir([X, FilsGauche, FilsDroit], L) :-
aplatir(FilsGauche, L1),
aplatir(FilsDroit, L2),
append(L1, [X|L2], L).
separe([], _, [], []).
separe([H|T], X, [H|L1], L2) :-
H < X,
!,
separe(T, X, L1, L2).
separe([H|T], X, L1, [H|L2]) :-
separe(T, X, L1, L2).
arbre_ordonne([], []).
arbre_ordonne([H|T], [H, Arbre1, Arbre2]) :-
separe(T, H, L1, L2),
arbre_ordonne(L1, Arbre1),
arbre_ordonne(L2, Arbre2).
tri_rapide(L, Res) :-
arbre_ordonne(L, Arbre),
aplatir(Arbre, Res).
%%% - Section 2 - %%%
fib1(0, 1).
fib1(1, 1).
fib1(N, F) :-
N > 1,
N1 is N - 1,
N2 is N - 2,
fib1(N1, F1),
fib1(N2, F2),
F is F1 + F2.
fib2(N, F) :-
fib2_acc(N, F, _).
fib2_acc(0, 1, 0).
fib2_acc(1, 1, 1).
fib2_acc(N, F, F1) :-
N > 1,
N1 is N - 1,
fib2_acc(N1, F1, F2),
F is F1 + F2.
:- dynamic(fib3/2).
fib3(0, 1).
fib3(1, 1).
fib3(N, F) :-
N > 1,
N2 is N - 2,
fib3(N2, F2),
N1 is N - 1,
fib3(N1, F1),
F is F1 + F2,
asserta(fib3(N, F) :- !).
[Précedent][Fin-Préc.][Début][Haut]