(* Exercice 1 *) (* Question 1 *) let rec der liste = match liste with | [] -> failwith "liste vide" | a::[] -> a | a::reste -> der reste ;; der [ 1;2;3;4;5;6];; let rec der_2 liste = if liste = [] then failwith "liste vide" else if List.length liste = 1 then List.hd liste else der_2 (List.tl liste );; (* Question 2 *) let rec avant_der liste = match liste with | [] | [_] -> failwith " erreur de liste " | a::b::[] -> a | a::reste -> avant_der reste;; avant_der [1;2;3;4;5;6;7];; let rec avant_der_2 liste = match liste with | l when (List.length l) <= 1 -> failwith " erreur de liste " | a::b::[] -> a | a::reste -> avant_der_2 reste;; avant_der_2 [1;2;3;4;5;6;7];; (* Question 3 *) let rec nieme liste n = match liste with | [] ->failwith " Erreur de saisie " (* Si n > taille de la liste *) | liste when n <= 0 -> failwith " Erreur de saisie " | a::reste when n = 1 -> a (* cas terminal *) | a::reste -> nieme reste (n-1);; (* Exercice 2 *) let rec min_max liste = match liste with |[] -> failwith " liste vide " | a::[] -> (a,a) | a::reste -> let (min_reste , max_reste ) = min_max reste in if a < min_reste then ( a , max_reste ) else if a > max_reste then ( min_reste , a) else (min_reste , max_reste );; (* Exercice 3 *) let rec cat liste_1 liste_2 = match liste_1 with | [] -> liste_2 (* cas terminale *) | a::reste -> let l_3 = cat reste liste_2 in a::l_3;; cat [1;2;3] [4;5];; (* Exercice 4 *) let rec map_liste f liste = match liste with |[] -> [] | a::reste -> let l_reste = map_liste f reste in (f a) :: l_reste;; (* Exercice 5 *) let occurence element liste = let rec aux compteur liste = match liste with | [] -> [] | a::reste when a=element -> let l_reste = aux (compteur +1) reste in compteur :: l_reste | a::reste -> aux (compteur +1) reste in aux 1 liste;; occurence "a" [ "a";"bb";"a";"jj";"n";"a"];; (* Exercice 6 *)