OCaml
Pijpen, bestanden en streams
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