[OCaml] Rattraper une exception dans un filtrage de motifs

Avec un exemple simple de lecture de fichier

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour,

Depuis OCaml 4.02, il semble possible de rattraper une exception dans un filtrage de motif, ce qui permet si j’ai bien compris de s’affranchir de l’utilisation de la structure try ... with. J’utilise OCaml 4.02.3 et bénéficie donc de cette fonctionnalité.

Dans le cadre de la résolution d’un problème du Project Euler, je souhaite coder une fonction de lecture d’un fichier. La fonction prend comme argument un canal d’entrée, généré avec la fonction open_in. Elle lit chaque ligne du fichier puis construit une liste de chaînes de caractères représentant la liste des lignes. La condition d’arrêt de cette fonction récursive est l’atteinte de la fin du fichier, c’est-à-dire la levée de l’exception End_of_file par la fonction input_line.

let construction_liste entree =
  let rec aux entree liste = match input_line entree with
    | x -> aux entree (x::liste)
    | exception End_of_file -> liste
  in aux entree []

L’erreur à l’exécution de cette fonction est un simple Syntax error à la ligne 4.

Ai-je mal compris l’utilisation de cette fonctionnalité d’OCaml 4.02 ?

Merci pour votre attention ! :)

NB : la liste générée par cette fonction (enfin, si seulement elle compilait…) serait inversée et commencerait par la dernière ligne. J’ai simplement enlevé le List.rev du code, pour ne conserver que l’essentiel du problème dont il est question.

Édité par pyromorphite

Auteur du sujet

Merci pour ta réponse et pour ton article ! Effectivement, il me semble avoir compris la syntaxe (l’article donne d’ailleurs un exemple tout à fait identique avec l’exception End_of_file). Mon interpréteur est bien sur une version compatible de l’implémentation du langage, la première ligne affichée étant OCaml version 4.02.3.

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte