Énumérations
Définition
Un type énuméré est défini par une suite de constantes commencant par une majuscule.
On les sépare par le caractère |
.
# type maison = Gryffondor | Poufsouffle | Serdaigle | Serpentard;;
type maison = Gryffondor | Poufsouffle | Serdaigle | Serpentard
Cela revient à définir de nouvelles constantes que l'on peut utiliser normalement :
# let ma_maison = Gryffondor;;
val ma_maison : maison = Gryffondor
Utilisation
Il est ensuite possible d'utiliser ces constantes dans des fonctions :
# let est_gentil = function
| Serpentard -> false
| _ -> true;;
val est_gentil : maison -> bool = <fun>
On peut également utiliser le joker _
pour dire « dans tous les autres cas ».
Exercices
1) Écrire une fonction choixpeau
qui, à partir du nom d'un élève donne sa maison.
Le choixpeau n'est pas complêtement aléatoire, s'il reçoit les noms « Harry Potter », « Hermione Granger », « Ron Weasley », « Ginny Weasley » ou « Neville Londubat » il doit renvoyer « Gryffondor » ;
s'il reçoit « Luna Lovegood » il doit renvoyer « Serdaigle » ;
et s'il reçoit « Drago Malefoy » il doir donner « Serpentard ».
Dans tous les autres cas, il renvoie une maison aléatoire.
(On pourra utiliser le module Random
et sa fonction Random.int n
qui renvoie un entier entre 0 et n-1.
# let choixpeau = function
| "Harry Potter" -> Gryffondor
| "Ron Weasley" -> Gryffondor
| "Hermione Granger" -> Gryffondor
| "Neville Londubat" -> Gryffondor
| "Luna Lovegood" -> Serdaigle
| "Drago Malfoy" -> Serpentard
| _ -> let a = Random.int 4 in
if a = 0 then Gryffondor
else if a = 1 then Serdaigle
else if a = 2 then Poufsouffle
else Serpentard;;