(* list_make *) let rec list_make (n : int) (x : 'a) : 'a list = match n with | 0 -> [] | _ -> x :: list_make (n - 1) x ;; list_make 5 'e' ;; (* long_prefixe *) let rec long_prefixe (liste : 'a list) : int = match liste with | [] -> 0 (* | [_] -> 1 *) | t1 :: t2 :: q when t1 = t2 -> 1 + long_prefixe (t2 :: q) | _ -> 1 ;; long_prefixe [] ;; long_prefixe [1] ;; long_prefixe [1; 2] ;; long_prefixe [1; 1] ;; long_prefixe [1; 1; 2] ;; long_prefixe [1; 1; 2; 2] ;; long_prefixe [1; 1; 1; 1; 2; 1; 4] ;; (* minmax *) let rec minmax (liste : int list) : int * int = match liste with | [] -> failwith "Liste vide" | [t] -> (t, t) | t :: q -> let (mi, ma) = minmax q in (min t mi, max t ma) ;; minmax [4; 2; 6; 8; 3; 9] ;; (* fusion *) let rec fusion (l1 : 'a list) (l2 : 'a list) : 'a list = match l1 with | [] -> l2 | t1 :: q1 -> let t2 = (List.hd l2) in if t1 < t2 then t1 :: (fusion q1 l2) else t2 :: fusion l1 (List.tl l2) ;; fusion [1; 3; 4; 6; 8; 10] [2; 3; 5; 11] ;;