Définir une variable
let a = 42
let almost_pi = 3.14
let google = 1e100
let cheers = "Hello world!"
let result =
let a = 28 in
let b = 14 in
a + b
Définir une fonction
let sum = fun a -> fun b -> a + b
let sum = fun a b -> a + b
let sum a b = a + b
let result = (fun x -> 2 * x) 21
let rec fact n =
if n = 0 then 1
else n * fact (n-1)
Appliquer une fonction
let f x y z = (x + y) * z
let result = f 1 4 3
let result = f 1 (2 * 2) (f 3 (-2) 3)
let incr x = x + 1
let double x = 2 * x
let mult x y = x * y
let a =
mult 3 (double (incr 6))
let a =
6
|> incr
|> double
|> mult 3
let a =
mult 3 @@ double @@ incr @@ 6
Utiliser des labels pour les arguments
Avantage désiré : meilleure lisibilité au niveau du code appelant la fonction. Nous utilisons donc les labels dès que nous avons une fonction prenant des arguments nombreux et/ou compliqués, ou pouvant être confondu facilement (par exemple hauteur et largeur). Permet aussi de pouvoir mettre les arguments dans n'importe quel ordre, s'ils sont tous nommés.
let apply ~f ~x = f x
let result = apply ~f:sqrt ~argument:4.
let result = apply ~argument:9. ~f:sqrt
let f = sqrt
let argument = 16.
let result = apply ~f ~argument
Couples et uplets.
let vector = (1.,-2.)
let left (x,y) = x
let right couple =
let (x,y) = couple in y
let triplet = ("John", "Doe", 1992)
Les listes
En programmation fonctionnelle, les tableaux ne sont pas une structure fondamentale et élémentaire. Pour coder des ensembles d'éléments, on utilise les listes.
let ints = 1::2::3::4::[]
let chars = ['a';'b';'c';'d']
let erroneous = ['a','b','c']
let forbidden = ['a';1;0.0]
Pour obtenir le contenu d'une liste, il faut utiliser la construction match <expr> with. Souvent, on préfère utiliser les fonctions du module List.
let rec length list =
match list with
| [] -> 0
| first::others -> 1 + length others