プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~のp.215より。
UNIXの cat コマンドは,ファイル名の列を引数として,その内容を順次表示する(標準出力 に書き込む)ものです。これを OCaml で実装し,実行可能ファイルを作成しなさい。オプシ ョンに関しては少なくとも行番号を表示するための -n オプションを実装すること。
let version = "0.1" let display_linenum = ref false let filenames = ref [] let spec = [("-n", Arg.Set display_linenum, "Display line number."); ("-version", Arg.Unit (fun () -> Printf.printf "cat in OCaml ver.%s\n" version), "Display version.")] (* print each lines *) let rec output_file ic = print_endline (input_line ic); output_file ic (* print each lines with line number *) let rec output_file_n n ic = Printf.printf "%5d %s\n" n (input_line ic); output_file_n (n+1) ic let cat_file filename = let infile = open_in filename in try if !display_linenum then output_file_n 1 infile else output_file infile; with End_of_file -> close_in infile let () = Arg.parse spec (fun s -> filenames := s :: !filenames) "Usage: cat [-n] [-help] [-version] filename ..."; List.iter cat_file (List.rev !filenames)
^o^ >ocamlc -o cat.exe cat.ml ^o^ >cat -n cat.ml 1 let version = "0.1" 2 3 let display_linenum = ref false 4 5 let filenames = ref [] 6 7 let spec = [("-n", 8 Arg.Set display_linenum, 9 "Display line number."); 10 ("-version", 11 Arg.Unit (fun () -> Printf.printf "cat in OCaml ver.%s\n" ve sion), 12 "Display version.")] 13 (以下略)