(* donnees *) let a = 32+52;; let a' = a*2;; let b = "boom";; let c = 4 * "paf";; let d = (3 > 2);; let l = [1;3;5;7];; let l' = [];; (* type bizarre *) let l'' = [2;"deux"];; (* NB: pas droit aux majuscules au debut des identificateurs!! *) (* fonctions *) let suivant x = x+1;; let dix = suivant 9;; let trois = suivant (suivant 1);; let douze = (suivant suivant) 1;; let rec fact n = if n <= 1 then 1 else n * (fact (n-1)) ;; let rec double n = if n=0 then 0 else suivant (suivant (double (n-1))) ;; (* faisons fibonacci *) (* une liste, c'est soit la liste vide, soit la tete de la liste suivie de la queue de la liste *) let rec longueur l = match l with | [] -> 0 | x::xs -> 1 + (longueur xs) ;; let cinq = longueur [32;52;17;3];; let rec somme l = match l with | [] -> 0 | x::xs -> x+(somme xs) ;; let rec garde_pairs l = ?? (* tout est fonction *) let evalue_fonction f = 3 + (f 2);; let g = evalue_fonction;; (* fonctions a plusieurs arguments *) let max a b = if a [] | x::xs -> (f x)::(applique f xs) ;; let f x y = y*x;; let l = applique (f 3) [1;2;3];; (* fonction anonyme *) let l' = applique (fun n -> 3*n) [1;2;3];; (* declarations locales *) let a = let x = 3 in x*x*x ;; let f x y = let t = x*x - x*y in if t>0 then x-y else y -x ;; (* liaison statique *) let a = let n = 2 in let n = 3 in n*n ;; let b = a + a;; let b = a + b;; (* fonctions d'ordre superieur *) let fixe_second g y = fun x -> g x y ;; let compose f g = fun x -> f (g x) ;; let c' = fun f -> compose f f;; (* au passage: librairies, flottants, tuples *) (* la librairie OCaml: cf. http://caml.inria.fr *) (* puis chercher la documentation, part IV "the OCaml library", "standard library" *) List.length [7;3;5;4];; let c = 3.2 +. 3.1;; let n = 3 * 3.333333;; let f (x,y) = x+y;; let permute (a,b,c) = (b,a,c);; let t = permute ("lang", "strauss kahn", "fabius");; let t' = permute (3, [4;2], "hop");;