Adloun

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

Le cours du chapitre · Tous les exercices du chapitre