Enregistrements et types mutuellement récursifs
Cours · OCaml (option informatique), chapitre 7 · prépas MPSI et MP, option informatique · le début du chapitre, la suite sur Adloun
7.1 Introduction et motivation
Le chapitre 3 a montré les types sommes : une valeur est l'une de plusieurs formes. Il manque leur complément, les types produits nommés : une valeur qui regroupe plusieurs champs à la fois — un point a une abscisse et une ordonnée, un étudiant a un nom et une note. Le n-uplet (chapitre 1) le faisait déjà, mais par position : dans (0.0, 1.0), lequel est l'abscisse ? L'enregistrement répond en nommant les champs.
Ce chapitre présente les enregistrements (immuables et mutables), puis les types mutuellement récursifs (déclarés ensemble avec and), qui permettent de modéliser des structures où deux notions se renvoient l'une à l'autre — un arbre et la forêt de ses sous-arbres, un système de fichiers et son contenu. Tout cela relève du niveau A.2 (utilisable après rappel).
7.2 Les enregistrements
Un enregistrement (record) regroupe plusieurs valeurs, chacune désignée par un nom de champ.
On déclare un type enregistrement en listant ses champs (en minuscule) avec leur type, entre accolades :
type point = { x : float; y : float }
On construit une valeur en donnant chaque champ, et on accède à un champ par la notation pointée :
let origine = { x = 0.0; y = 0.0 }
let abscisse p = p.x
# let p = { x = 3.0; y = 4.0 };;
val p : point = {x = 3.; y = 4.}
# p.x;;
- : float = 3.
Exercices du chapitre
- Milieu de deux points corrigé
- Compte bancaire corrigé
- Champ de type liste corrigé
- Mise à jour fonctionnelle corrigé
- Taille d'un arbre général corrigé
- Hauteur d'un arbre général corrigé