let plusetfois a b = (a+b, a*b);; let rec pp2_h n = match n with | 0 -> 1 | _ -> 2 * (pp2_h (n/2)) let pp2 n = if n == 0 then 0 else pp2_h (n-1) let leeloo l = match l with | _::_::_::_::a::_ -> a | _ -> failwith "Not enough elements" let rec coupe l = match l with | a::b::q -> let qa, qb = coupe q in a::qa, b::qb | _ -> l, [] let rec colle la lb = match la with | [] -> lb | a::q -> a::(colle lb q) let rec compte l x = match l with | [] -> 0 | a::q -> if a == x then 1+(compte q x) else compte q x let rec sommesi l f = match l with | [] -> 0 | a::q -> if f a then a+(sommesi q f) else (sommesi q f) let rec majopred_h l f acc acc_n = match l with | [] -> 2*acc >= acc_n | a::q -> majopred_h q f (if f a then acc+1 else acc) (acc_n+1) let majopred l f = majopred_h l f 0 0 let rec lexico la lb = match la, lb with | [], _ -> true | _, [] -> false | a::_, b::_ when a < b -> true | a::_, b::_ when a > b -> false | _::qa, _::qb -> lexico qa qb let rec aplatir l = match l with | [] -> [] | []::ql -> aplatir ql | (a::q)::ql -> a::(aplatir (q::ql))