(* 1 à 8 à tester vous même *) (* 9 fun x -> x *) (* 10 fun x y f -> f x = f y *) (* 11 compose vue en cours et en TM *) (* 12 fun x p -> if p x then 0 else 1 *) (* 13 *) let rec seq_aux n = if n = 0 then (0, 3) else let a, b = seq_aux (pred n) in b, 2 * a - b (* 14 *) let seq n = fst (seq_aux n) (* 15 int -> int *) (* 16 O(n) *) type couple = C of int * int (* 17 *) let make_couple i j = C(i, j) (* 18 *) let couple_fst couple = let C(i, _) = couple in i let couple_snd couple = let C(_, j) = couple in j (* 19 *) let couple_sum couple = couple_fst couple + couple_snd couple (* 20 *) let couple_add couple1 couple2 = make_couple (couple_fst couple1 + couple_fst couple2) (couple_snd couple1 + couple_snd couple2) type couple = bool -> int (* 21 *) let make_couple i j = fun b -> if b then i else j let couple_fst couple = couple true let couple_snd couple = couple false (* 23 oui à condition qu'on ait bien utilisé les fonctions constructeur et accesseurs *) let epsilon = 1e-6 (* 23 *) let derivee f h = fun x -> (f (x +. h) -. f (x -. h)) /. (2. *. h) (* 24 *) let rec derivee_n n f h = if n = 0 then f else derivee_n (pred n) (derivee f h) h