From 363950478d6559fe312be1762782efd67972354c Mon Sep 17 00:00:00 2001 From: Arkitu Date: Tue, 9 Dec 2025 17:35:18 +0100 Subject: [PATCH] td4 --- td4/td4.ml | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 td4/td4.ml diff --git a/td4/td4.ml b/td4/td4.ml new file mode 100644 index 0000000..fe68d2b --- /dev/null +++ b/td4/td4.ml @@ -0,0 +1,97 @@ +(* Exercice 1 *) +let rec rev_h l acc = match l with + | [] -> acc + | a::q -> rev_h q (a::acc) +;; +let rec rev l = rev_h l [];; + +let rec for_all f l = match l with + | [] -> true + | a::q -> f a && for_all f q +;; + +let rec exists f l = match l with + | [] -> false + | a::q -> f a || exists f q +;; + +let rec mem x l = match l with + | [] -> false + | a::q -> a=x || mem x q +;; + +(* Exercice 2 *) +let rec map f l = match l with + | [] -> [] + | a::q -> f a::map f q +;; + +let rec iter f l = match l with + | [] -> () + | a::q -> let () = f a in iter f q +;; + +let rec filter f l = match l with + | [] -> [] + | a::q -> + if f a then + a::filter f q + else + filter f q +;; + +let rec fold_right f l acc = match l with + | [] -> acc + | a::q -> f a (fold_right f q acc) +;; + +let rec fold_left f acc l = match l with + | [] -> acc + | a::q -> fold_left f (f acc a) q +;; + +(* Exercice 3 *) +let rec print_list print l = + print_string "["; + List.iter (fun a -> print a; print_string ",") l; + print_string "]" +;; + +(* Exercice 4 *) +let for_all f l = List.fold_left (fun acc a -> acc && f a) true l;; + +let exists f l = List.fold_left (fun acc a -> acc || f a) false l;; + +let mem x l = exists (fun a -> a=x);; + +(* Exercice 5 *) +let fact n = + let rec l n = + if n > 0 then + n::l (n-1) + else [] + in + List.fold_left (fun acc a -> acc * a) 1 (l n) +;; + +(* Exercice 6 *) +let init n f = if n = 0 then [||] else + let res = Array.make n (f 0) in + for i = 1 to n do + res.(i) <- f i + done; + res +;; + +let copy t = init (Array.length t) (fun i -> t.(i));; + +let mem x t = + let b = ref false in + let i = ref 0 in + let n = Array.length t in + while !i < n && (not !b) do + b := t.(!i) = x; + i := !i+1; + done; + !b +;;