補足4: print 関係
- print関係の式はたいてい、複数の式を続けて評価するので、
a; b; c; d; e のようにセミコロンで区切って書くことになる。
以下では、そのセミコロンは書いていないので、適宜補うこと。
- print_endline s ..... 文字列sを出力したあと、改行を出力する
- print_string s ..... 文字列sを出力する
- print_newline () ..... 改行を出力する
- print_int n ..... 整数nを出力する
- print_float f ..... 浮動小数fを出力する
- begin a; b; c; d; e end ..... a,b,c,d,eを順に評価してeの値を返す
例:
- print_endline "abc"
- print_string "abc"; print_int 13; print_newline ()
- let x = begin print_string "debug"; 13 end in x * 2
上級編: フォーマット文字列 (C言語のprintf文と同様)
- Printf.printf "Integer %d Floating-point %f String %s\n" 13 3.14 "abc"
補足5: 日本語の文字列の扱い
コメントの中では日本語文字が自由につかえるが、データとしての文字列の中
にも日本語を使う場合(使うだけなら、いきなりそう書けばよいのだが)、
表示が乱れてしまう。それを修復する方法は以下の通り。
たとえば EUCコードを表示できる端末で EUCコードの文字列を x という変数
にいれた場合、単純に x を表示すると、文字化けだが、以下のおまじないを
すると、正しく日本語の文字で表示される。
# let x = "わたし" ;;
val x : string = "\164\239\164\191\164\183"
# let print_non_escaped_string ppf = Format.fprintf ppf "\"%s\"";;
val print_non_escaped_string : Format.formatter -> string -> unit =
# #install_printer print_non_escaped_string ;;
# x ;;
- : string = "わたし"
#
意味としては、
上記のような設定を何もしない場合は、「文字列をISO-8859-1符号化と見なしてエスケープ文字を
いれた出力をしようとする」ために文字化けをおこすので、
上記の設定は、このような(迷惑な)エスケープをしないようにする、というこ
とらしい。(このあたりの詳細を調べた人は補足してほしい。)
亀山 幸義 (kam[at]cs.tsukuba.ac.jp; #を@に変えてください)