OCaml (option informatique) · Chapitre 7 · Exercice de TD
Un système de fichiers
Enregistrements et types mutuellement récursifs · niveau 3 (difficile)
Énoncé
Modéliser un système de fichiers et calculer la taille totale d'un élément.
Corrigé
On combine types sommes, enregistrements, listes et récursivité mutuelle :
type element =
| Fichier of fichier
| Dossier of dossier
and fichier = { nom_f : string; taille : int }
and dossier = { nom_d : string; contenu : element list }
let rec taille_totale e =
match e with
| Fichier f -> f.taille
| Dossier d -> taille_contenu d.contenu
and taille_contenu l =
match l with
| [] -> 0
| e :: reste -> taille_totale e + taille_contenu reste
Un element est soit un fichier (somme), décrit par un enregistrement à deux champs (produit), soit un dossier dont le contenu est une liste d'éléments — d'où la récursivité mutuelle entre element et ses enregistrements. La taille totale d'un fichier est sa taille ; celle d'un dossier, la somme des tailles de son contenu. Toutes les briques du cours se rejoignent ici.
Exercices semblables
- 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é