Zoeken…


Lezen van standaardinvoer en afdrukken naar standaarduitvoer

We maken een bestand met de naam reverser.ml met de volgende inhoud:

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

We compileren ons programma vervolgens met de volgende opdracht:

$ ocamlc -o reverser.byte reverser.ml

We testen het door gegevens naar ons nieuwe uitvoerbare bestand te sturen:

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

Het reserver.ml programma is geschreven in een imperatieve stijl. Hoewel imperatieve stijl prima is, is het interessant om dit te vergelijken met de functionele vertaling:

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 []

Dankzij de introductie van de functie maybe_read_line de besturingsstroom in deze tweede versie veel eenvoudiger dan in de eerste.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow