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を導入したことで、この2番目のバージョンでは最初のコントロールフローより制御フローがずっと簡単になりました。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow