OCaml
Tuberías, archivos y flujos
Buscar..
Leer desde Entrada estándar e Imprimir en Salida estándar
Preparamos un archivo llamado reverser.ml con los siguientes contenidos:
let acc = ref [] in
try
while true do
acc := read_line () :: !acc;
done
with
End_of_file -> print_string (String.concat "\n" !acc)
Luego compilamos nuestro programa usando el siguiente comando:
$ ocamlc -o reverser.byte reverser.ml
Lo probamos canalizando los datos a nuestro nuevo ejecutable:
$ cat data.txt
one
two
three
$ ./reverser.byte < data.txt
three
two
one
El programa reserver.ml está escrito en un estilo imperativo. Si bien el estilo imperativo está bien, es interesante comparar esto con la traducción funcional:
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 []
Gracias a la introducción de la función maybe_read_line el flujo de control es mucho más simple en esta segunda versión que en la primera.
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow