Fonctions
Déclaration
Une fonction se déclare avec le mot-clé fun
:
# fun x -> x * x;;
- : int -> int = <fun>
pour nommer une fonction, on utilise une variable :
# let f = fun x -> x * x;;
val f : int -> int = <fun>
Une notation plus courte :
# let f x = x * x;;
val f : int -> int = <fun>
Il est possible de mettre des parenthèses :
# let f (x) = x * x;;
val f : int -> int = <fun>
Il est possible ainsi d'indiquer le type du paramètre :
# let f (x:int) = x * x;;
val f : int -> int = <fun>
Utilisation
Pour appliquer une fonction à une valeur il suffit de les séparer d'un espace. On peut ajouter des parenthèses :
# f 2;;
- : int = 4
# f(2);;
- : int = 4
Attention ! L'application d'une fonction est prioritaire sur les autres opérateurs. Il peut donc être indispensable d'utiliser des parenthèses :
# f 2 + 2;;
- : int = 6
# f (2 + 2);;
- : int = 16
Fonction sans argument
Il est possible d'avoir des fonctions sans argument.
On utilise ()
à la place d'une variable :
# let f () = 42;;
val f : unit -> int = <fun>
Fonction sans valeur de retour
Une fonction qui ne renvoie rien, renvoie un type unit :
# let f x = print_int x;;
val f : int -> unit = <fun>
Fonctions récursives
Pour déclarer une fonction récursive il faut utiliser le mot-clé rec
:
let rec factorielle n =
if n = 0 then 1 else n * factorielle (n - 1)