输入与输出
从标准输入读取并打印到标准输出
我们准备了一个名为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 ,控制流程在第二个版本中比在第一个版本中简单得多。