« 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éfinition
Ligne 51 :
=== Exemple d'utilisation ===
On peut par exemple créer une fonction qui prend un entier en paramètre et
<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
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 (+)
* 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 ;;
|