OCaml
Tubi, file e flussi
Ricerca…
Leggi dallo standard input e stampa sullo standard output
Prepariamo un file chiamato reverser.ml con i seguenti contenuti:
let acc = ref [] in
try
while true do
acc := read_line () :: !acc;
done
with
End_of_file -> print_string (String.concat "\n" !acc)
Quindi compiliamo il nostro programma usando il seguente comando:
$ ocamlc -o reverser.byte reverser.ml
Lo proviamo collegando i dati al nostro nuovo eseguibile:
$ cat data.txt
one
two
three
$ ./reverser.byte < data.txt
three
two
one
Il programma reserver.ml è scritto in uno stile imperativo. Mentre lo stile imperativo va bene, è interessante confrontare questo con la traduzione funzionale:
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 []
Grazie all'introduzione della funzione maybe_read_line il flusso di controllo è molto più semplice in questa seconda versione rispetto al primo.
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow