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

Contenu supprimé Contenu ajouté
m Coquille
Watermy (discussion | contributions)
m ortho, syntaxe & co
Ligne 7 :
}}
 
Ce chapitre est le plus important de la leçon. N'hésitez pas à le relire plusieurs fois et effectuer le quizl'exercice dédié auaux fonctionfonctions.
 
== Les fonctions ==
=== Qu'est-ce qu'une fonction ? ===
Les fonctions OCaml sont très proches des [[w:Fonction_(mathématiques_élémentaires)|fonctions mathématiques]].
Par exemple <br />
<big><math>f(x) = x</math></big> <br />
s'écrit en OCaml
<source lang="ocaml">function x -> x;;</source>
Ligne 22 ⟶ 23 :
|contenu=
<source lang="ocaml">
function|fun <paramètre> -> <expression>;;
 
<type du paramètre> -> <type de l'expression> = <fun>
Ligne 33 ⟶ 34 :
<source lang="ocaml">
# function x -> x + 1;;
# fun x -> x + 1;;
 
- : int -> int = <fun>
Ligne 47 ⟶ 49 :
=== Qu'est-ce qu'une définition ? ===
 
Cependant redéclarerRedéclarer à chaque fois laune 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
|contenu=
Ligne 59 ⟶ 61 :
}}
 
On peut aussi effectuer une définition locallocale avec le mot-clef '''in''':
{{Définition
| titre=Définition locale
Ligne 67 ⟶ 69 :
</source>
}}
Les définitions locales sont utiles pour factorisées des calcules répétitifs.
 
=== Exemple d'utilisation des définitions ===
Pour assigner un entier à un nom.
Pour l'utiliser :
<source lang="ocaml">
# let nombre = 10;;
Ligne 77 ⟶ 79 :
</source>
 
On peut ensuite appelérécupérer notresa nouvelvaleur identificateurà pourtout récupérer sa valeurmoment.
<source lang="ocaml">
# nombre;;
Ligne 87 ⟶ 89 :
 
Si nous voulons effectuer le calcul suivant : <math>2*3*4 + 2*3</math>
Ici <math>2*3</math> est calculé 2 fois. Nous pouvons résoudre ce problème en utilisant les définitions locales.
<source lang="ocaml">
# let tmp = 2*3 in tmp * 4 + tmp;;
Ligne 99 ⟶ 101 :
== Définition et fonctions ==
 
Nous pouvons maintenantprocéder de même pour donner un nom à nos fonctions.
{{Définition
| titre=Définition localed'une fonction
|contenu=
<source lang="ocaml">
Ligne 117 ⟶ 119 :
</source>
 
{{Attention|Avec_fond = oui|1=Il est très important de comprendre ici le résultat de l'interpréteur. }}
Disséquons élément par élément. :
* '''val successeur :''' : 'Successeur' est leici dule nom de la définition.
* ''': int -> int''' : La fonction prend un entier en paramètre et donne un entier en sortierésultat.
* ''' = <fun> ''' : La valeur de la définition est une fonction.
}}
 
Ligne 126 ⟶ 129 :
Une fonction à plusieurs paramètres peut être vu comme une suite de fonction à un paramètre.
<source lang="ocaml">
# let fxy = function|fun x -> function|fun y -> x*y;;
 
val fxy : int -> int -> int = <fun>
Ligne 182 ⟶ 185 :
</source>
 
Pour corriger ce problème il faut mettre des parenthèses sur l'opération.
<source lang="ocaml">
# fxy (1+2) 3;;
Ligne 190 ⟶ 193 :
 
 
== [[w:Sucre_syntaxique|Sucre syntaxique]] ==
Il y a un raccourci d'écriture pour les fonctions.
 
Ligne 255 ⟶ 258 :
 
== Référence ==
{{LienWeb|format=html|licence=copyright|langue=en|url=http://caml.inria.fr/pub/docs/manual-ocaml/expr.html#toc48|commentaire=Documentation sur les fonctions}}