TD 1 : Fonctions
Récursivité
Rions un peu...
Définissez la fonction repete puis la fonction rigole de sorte à avoir le comportement suivant. Interrogez-vous sur le type de la fonction repete que caml calcule pour vous.
# repete 45 7;;
- : int list = [45; 45; 45; 45; 45; 45; 45]
# rigole 5;;
- : string list = ["Ah!"; "Ah!"; "Ah!"; "Ah!"; "Ah!"]
Les fonctions comme argument
Définissez la fonction map, et vérifiez que son comportement est le suivant. Retrouvez son type à la main.
# let l = [1;2;3;4;5];;
val l : int list = [1; 2; 3; 4; 5]
# map (function x -> x*x) l;;
- : int list = [1; 4; 9; 16; 25]
# let ll = map string_of_int l;;
val ll : string list = ["1"; "2"; "3"; "4"; "5"]
# map (function x -> "TD-"^x^".ml") ll;;
- : string list = ["TD-1.ml"; "TD-2.ml"; "TD-3.ml"; "TD-4.ml"; "TD-5.ml"]
# map rigole l;;
- : string list list =
[["Ah!"]; ["Ah!"; "Ah!"]; ["Ah!"; "Ah!"; "Ah!"];
 ["Ah!"; "Ah!"; "Ah!"; "Ah!"]; ["Ah!"; "Ah!"; "Ah!"; "Ah!"; "Ah!"]]
Application : Moyenne et variance d'une liste
Préambule
Réalisez la fonction iter_moy qui calcule la moyenne d'une liste, en accumulant la somme et le nombre d'éléments au fur et à mesure du parcours de cette liste.
let rec iter_moy = function   ([]      ,somme,nb) -> ...
                            | (x::reste,somme,nb) -> ...

iter_moy ([2.8;6.7;12.5;4.36], 0.0, 0);;
Réalisation des fonctions
Définissez une fonction moyenne en utilisant iter_moy comme une définition locale (i.e. let ... in ...). Testez :
let l = map (function x-> x*x) [1;2;3;4;5];;
let ll = map float_of_int l;;
moyenne ll;
Définissez la fonction variance, qui donne la moyenne des carrés des écarts à la moyenne.
Pour ceux qui ont fini
Ecrivez la fonction map2 pour les fonctions à deux arguments
map2 repete ["toto";"titi";"tutu"] [3;4;5];;
let paires = map2 (function x -> function y -> (x,y));;
paires [1;2;3;4] ["un";"deux";"trois";"quatre"];;
Disons qu'une liste représente un ensemble (i.e. l'ordre des éléments de la liste ne nous importe pas). Retrouvez (sans regarder le poly....) la fonction qui calcule l'ensemble de tous les sous-ensembles que l'on peut construire à partir d'un ensemble donné.