Recherche…


Lire à partir de l'entrée standard et imprimer à la sortie standard

Nous préparons un fichier appelé reverser.ml avec le contenu suivant:

let acc = ref [] in
    try
        while true do
            acc := read_line () :: !acc;
        done
    with
        End_of_file -> print_string (String.concat "\n" !acc)

Nous compilons ensuite notre programme en utilisant la commande suivante:

$ ocamlc -o reverser.byte reverser.ml

Nous le testons en canalisant les données vers notre nouvel exécutable:

$ cat data.txt
one
two
three
$ ./reverser.byte < data.txt
three
two
one

Le programme reserver.ml est écrit dans un style impératif. Bien que le style impératif soit correct, il est intéressant de le comparer à la traduction fonctionnelle:

let maybe_read_line () =
  try Some(read_line())
  with End_of_file -> None

let rec loop acc =
  match maybe_read_line () with
  | Some(line) -> loop (line :: acc)
  | None -> List.iter print_endline acc

let () = loop []

Grâce à l'introduction de la fonction maybe_read_line le flux de contrôle est beaucoup plus simple dans cette seconde version que dans la première.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow