Formation de programmation CAML en pdf, tutoriel & guide de travaux pratiques en pdf.
Les types composés
Jusqu´a présent toutes les fonctions rendaient un seul objet en résultat. On peut avoir un ou plusieurs arguments en entrée mais jamais qu´un objet en résultat. On peut représenter une fonction par une « boite ». Les flèches entrantes pour chacun des arguments de la fonction et une flèche sortante pour le résultat.
Types produit
Définir des m-uplets
En CAML, on définit des m-uplets avec la virgule «, »
Par exemple :
# 2,5 ;; -: int *int = (2,5) # « bonjours », »tchao » ;; -: string * string = (« bonjours », »tchao ») # 2.0 , 5.8 , 3.6 ;; -:float* float *float = (2. , 5.8 , 3.6)
La virgule est le point
A ne surtout pas confondre : l´expression où on remplace des virgules par des points (ou inversement) peut syntaxiquement être correctes, mais le sens de l´expression sera complètement différent.
# let x = 1, (0 + 3), 5 ;; val x : int * int * int = (1, 3, 5)
Règle de typage sur la « , » et le type produit
On peut avoir n‟importe quel type à gauche et a droite de la virgule ET surtout les types peuvent être différent.
# let x = “bonjours”, 2 , 4.5 ;; val x : string * int * float = (« bonjours », 2, 4.5)
Exemple 1
Si on veut calculer dans le plan, le milieu de 2 points a et b
# let milieu (ax,ay)(bx,by) = (ax +. bx)/.2. , (ay +. by)/. 2. ;; val milieu : float * float -> float * float -> float * float = <fun>
Exemple 2 :
On veut une fonction capable de simuler un jeté de 2 dés a N faces. On utilise pour cela
# Random__int m (renvoie un entier au hasard dans [0, m-1])
Ce qui donne
# let lancer2dès m = 1 + random__int m ,
1 + random__int m;;
Lancer2dès : int -> int * int