[Précedent][Fin-Préc.][Fin][Haut]

4 Éléments de corrigé


  %%% - 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]