OCaml
Трубы, файлы и потоки
Поиск…
Чтение со стандартного ввода и печать на стандартный вывод
Мы готовим файл с именем reverser.ml со следующим содержимым:
let acc = ref [] in
try
while true do
acc := read_line () :: !acc;
done
with
End_of_file -> print_string (String.concat "\n" !acc)
Затем мы скомпилируем нашу программу, используя следующую команду:
$ ocamlc -o reverser.byte reverser.ml
Мы тестируем данные по трубопроводам на наш новый исполняемый файл:
$ cat data.txt
one
two
three
$ ./reverser.byte < data.txt
three
two
one
Программа reserver.ml написана в императивном стиле. Хотя императивный стиль в порядке, интересно сравнить это с функциональным переводом:
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 []
Благодаря внедрению функции maybe_read_line поток управления намного проще в этой второй версии, чем в первом.
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow