« Premiers pas en OCaml/Fonctions » : différence entre les versions

Contenu supprimé Contenu ajouté
mAucun résumé des modifications
Ligne 37 :
</source>
 
Les fonctions (ou abstractions) sont définidéfinies par la syntaxe suivante :
 
{{Définition
Ligne 51 :
=== Exemple d'utilisation ===
 
On peut par exemple créer une fonction qui prend un entier en paramètre et renvoirenvoie son successeur.
<source lang="ocaml">
# function x -> x + 1;;
Ligne 70 :
 
Redéclarer à chaque fois une fonction devient vite pénible.
Pour régler le problème, on utilise une '''définition''' qui consiste à donner un '''nom''' à une '''valeur'''.
Il faut utiliser le mot-clef '''let''' pour assigner un nom à une expression.
{{Définition
Ligne 165 :
</source>
}}
Il faut savoir que pour le type des fonctions '''le parenthésage à droite est implicite'''. Pour plus de compréhension, mettons des parenthèses. on obtient '''(int -> (int -> int))'''. On a donc une fonction qui prend en paramètre un entier et qui rend une fonction prenant en paramètre un entier et qui rend un entier.
Imaginez que l’on passe à la fonction fxy qu'un seul paramètre : (2 -> (int -> int)) on récupère alors une fonction qui prend un entier en paramètre et retourne un entier en paramètre (int -> int).
<source lang="ocaml">
Ligne 173 :
</source>
 
Maintenant, imaginez que l’on passe à la fonction fxy deux paramètres : (2 -> (5 -> int)) on récupère un entier.
<source lang="ocaml">
# ((fxy 2) 5);;
Ligne 216 :
</source>
 
Pour corriger ce problème, il faut mettre des parenthèses sur l'opération.
<source lang="ocaml">
# fxy (1 + 2) 3;;
Ligne 225 :
== Fonction sans paramètre ==
 
Imaginons maintenant que nous souhaitons une fonction qui renvoirenvoie un résultat mais qui n'a pas besoin de paramètre en entrée.
Nous pourrions essayer de ne pas spécifier de paramètre comme ci-dessous.
<source lang="ocaml">
Ligne 242 :
</source>
 
Pour appeler la fonction, il suffit de lui passer en paramètre la seule valeur du type unité : '''()'''.
<source lang="ocaml">
# sans_parametre ();;
Ligne 290 :
</source>
 
Grâce à ceci, on sait que la fonction (+) peuxpeut s'utiliser de façon.
* Soit avec deux paramètres et la fonction renvoie alors un entier.
<source lang="ocaml">
Ligne 304 :
</source>
 
Sans vous en rendre compte, vous venez de recoder la fonction successeur.
<source lang="ocaml">
# let successeur = (+) 1 ;;