ioCode
Implémentation immuable d'une file
Files • Exercices 1A
- Écrire une fonction1IndiceInitialiser un enregistrement avec deux listes vides pour représenter la file vide.
filevide : unit -> 'a filequi renvoie une file vide. Par exemplefilevide ()renvoie{tete = []; queue = []}. - Écrire une fonction2IndiceComparer les deux champs de l'enregistrement avec la liste vide pour vérifier le statut.
est_vide : 'a file -> boolqui renvoietruesi la file est vide etfalsesinon. Par exempleest_vide filevide ()renvoietrue. - Écrire une fonction3IndiceConstruire une nouvelle file en ajoutant l'élément en tête de la liste queue.
enfiler : 'a file -> 'a -> 'a filequi calcule une nouvelle file contenant l'élément ajouté. Par exempleenfiler filevide 1renvoie{tete = []; queue = [1]}. - Écrire une fonction4IndiceParcourir la liste d'origine pour accumuler les éléments dans l'ordre inverse et utiliser une fonction récursive interne auxiliaire pour réaliser cette accumulation.
inverser : 'a list -> 'a listqui calcule la liste inversée. Par exempleinverser [1; 2; 3]renvoie[3; 2; 1]. - Écrire une fonction5IndiceExtraire le premier élément de la liste tete et mettre à jour la structure de la file.
defiler : 'a file -> 'a * 'a filequi renvoie le premier élément de la file et la file mise à jour. Par exempledefiler {tete = [1]; queue = []}renvoie(1, {tete = []; queue = []}). - Écrire une fonction6IndiceConsulter le premier élément de la liste tete sans modifier la structure de la file sauf si la tete est vide et la queue non vide.
tete : 'a file -> 'a * 'a filequi renvoie le premier élément de la file sans le supprimer ainsi que la file. Si la tete de la file est vide, le transvasement est effectué et la fonction renvoie la file modifiée. Par exempletete {tete = []; queue = [1]}renvoie(1, {tete = [1]; queue = []}).
Langage
Console initialisée. En attente de l'interpréteur...