Types sommes et arbres
Cours · OCaml (option informatique), chapitre 3 · prépas MPSI et MP, option informatique · le début du chapitre, la suite sur Adloun
3.1 Introduction et motivation
Jusqu'ici nous avons utilisé les types qu'OCaml fournit : entiers, booléens, n-uplets, listes, option. La puissance du langage vient de ce qu'on peut définir les siens, taillés sur mesure pour le problème traité. Modéliser un jeu de cartes, une expression arithmétique, un arbre généalogique : à chaque fois, un type bien choisi rend le code plus clair, et surtout permet au compilateur de vérifier qu'on a traité tous les cas.
Ce chapitre présente les types sommes (aussi appelés types énumérés, ou unions) : un type dont une valeur est l'une parmi plusieurs formes, chacune introduite par un constructeur. Le filtrage du chapitre précédent s'y applique directement et y prend tout son sens : un match sur un type somme est exhaustif exactement quand il couvre tous les constructeurs — et le compilateur le vérifie. On découvrira enfin les types récursifs, qui se définissent à partir d'eux-mêmes : les arbres, structure aussi fondamentale que la liste, et qui se traite par le même réflexe de récursion.
3.2 Déclarer un type
Le mot-clé type introduit un nouveau nom de type. Dans le cas le plus simple, un synonyme pour un type existant, qui documente l'intention :
type point = float * float
type chemin = point list
Un type peut être polymorphe : il dépend d'un (ou plusieurs) type(s) paramètre(s), notés 'a, 'b, …, écrits avant le nom.
type 'a paire = 'a * 'a (* paire homogène *)
3.3 Les types sommes
3.3.1 Types énumérés
La forme la plus simple d'un type somme énumère un nombre fini de constructeurs constants :
type couleur = Trefle | Carreau | Coeur | Pique
Les noms de constructeurs commencent obligatoirement par une majuscule (Trefle, Coeur), ce qui les distingue d'un coup d'œil des identifiants (variables, fonctions), qui commencent par une minuscule. Le séparateur entre constructeurs est la barre verticale |.
Exercices du chapitre
- Hauteur d'un arbre corrigé
- Compter les feuilles corrigé
- Miroir d'un arbre corrigé
- Évaluer une expression arithmétique corrigé
- Appartenance dans un arbre binaire de recherche corrigé
- Insertion dans un ABR corrigé