Adloun

Un système de fichiers

Exercice · OCaml (option informatique), chapitre 7 — Enregistrements et types mutuellement récursifs

É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.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.