-
COQUERY EMMANUEL authoredCOQUERY EMMANUEL authored
cm2-demo.md 3.42 KiB
Variables
let x_g = 3;;
let x = 2 in 3 + x * x;;
let x = 5 in
let y = x + 2 in
x * y;;
let x =
let y = 3
in y * y
in x + 10;;
Appels de fonction
not false;;
log 10.0;;
abs (int_of_string "-3");;
hypot 3.0 4.0;;
hypot (2.5 +. 0.5) (2.0 *. 2.0);;
hypot 2.0 1.5 *. 2.0 ;;
hypot 2.0 (1.5 *. 2.0) ;;
Définitions de fonction
let carre (x:int): int = x * x;;
let carre2 x = x * x;;
let cube x = x * x * x
in cube 2;;
let cube (x:int): int =
let carre3 y = y * y
in carre3 x * x;;
cube 4;;
carre3;;
Énumérations
type jour =
| Lundi
| Mardi
| Mercredi
| Jeudi
| Vendredi
| Samedi
| Dimanche
;;
Lundi;;
Mercredi;;
Lundi = Mercredi;;
Lundi < Mercredi;;
Filtrage
match Lundi with
| Mardi -> 2
| Mercredi -> 3
| Lundi -> 1
| Vendredi -> 5
| Dimanche -> 7
| Samedi -> 6
| Jeudi -> 4
;;
match Lundi with
| Mardi -> 2
| Mercredi -> 3
| Lundi -> 1
| Vendredi -> 5
| Dimanche -> 7
| Samedi -> 6
(* | Jeudi -> 4 *)
;;
let weekend (j: jour): bool =
match j with
| Samedi -> true
| Dimanche -> true
| autre -> false
;;
let weekend (j: jour): bool =
match j with
| Samedi -> true
| Dimanche -> true
| _ -> false
;;
Nuplet
match (3.5, "coucou") with
| (_, s) -> s^" tout le monde"
;;
Filtrage sur types de base
let is_zero (n: int): bool =
match n with
| 0 -> true
| _ -> false
;;
is_zero 1;;
is_zero 0;;
Types sommes avec données
type nombre =
| Int of int
| Float of float
| Cplx of float * float
| Nan
;;
Int 3;;
Cplx (3.0, 7.2);;
let int_of_nombre (n: nombre): int =
match n with
| Int i -> i
| Float f -> int_of_float f
| Cplx (r,_) -> int_of_float r
| Nan -> 0
;;
int_of_nombre (Cplx (3.0, 7.2));;
Pattern matching en profondeur
let is_zero (n: nombre): bool =
match n with
| Int 0 -> true
| Float 0.0 -> true
| Cplx (0.0, 0.0) -> true
| _ -> false
;;
Rappel récursivité
(**
Fonction qui calcule la somme des carrés des n premiers entiers
@param n le nombre d'entiers
@return la somme
*)
let rec somme_carres (n: int): int =
if n <= 0
then 0
else n * n + somme_carres (n-1);;
Listes
let l1 = 1 :: 3 :: 5 ::[] ;;
let l2 = [ 1; 3; 5 ];;
l1 = l2;;
type resultat = Aucun | Int of int;;
(**
Cette fonction donne le maximum d'un liste d'int
@param l la liste dont on veut le max
@return le max ou Aucun si la liste est vide
*)
let rec maximum (l: int list): resultat =
match l with
| [] -> Aucun
| x :: [] -> Int x
| x :: l2 ->
match maximum l2 with
| Aucun -> Int x
| Int y -> if x > y
then Int x
else Int y
;;
maximum [ 2; 1; 5; 3 ];;
maximum [ 2 ];;
maximum [];;
(**
Calcule le maximum dans une liste de liste d'int
@param ll la liste de liste
@return le max ou Aucun s'il n'y a pas d'int dans ll
*)
let rec maximum2 (ll: int list list): resultat =
match ll with
| [] -> Aucun
| l :: [] -> maximum l
| l :: ll2 ->
let ml = maximum l in
let mll2 = maximum2 ll2 in
match ml, mll2 with
| Aucun, m -> m
| m, Aucun -> m
| Int m1, Int m2 ->
if m1 < m2
then Int m2
else Int m1
;;
maximum2 [ [2; 3]; [4; 1]; [1; 6; 8]];;
maximum2 [ []; [1]; [0; 0]];;
maximum2 [ []; [] ];;
maximum2 [];;