プログラミング in OCaml メモ

print_endlineとprint_newline

8.3 制御構造 – 8.3.1 逐次実行

「;」の使い方について述べているところで、以下のようなコードがあった。

let print_hello s =
    print_string "Hello, ";
    print_string s;
    print_endline ();   (* <- 余計なセミコロン *)

let print_bye s =
    print_string "Bye bye, ";
    print_string s;
    print_endline ();;
                    ^^
Syntax error

これは、「;」を区切りとして使って、文の終わりとしては使わないようにという
ことなんだけど、以下のようにしてもエラーが出る。
「;;」は、なくてもかまわない。

let print_hello s =
    print_string "Hello, ";
    print_string s;
    print_endline ();;

let print_bye s =
    print_string "Bye bye, ";
    print_string s;
    print_endline ();;

Error: This expression has type unit but an expression was expected of type string

print_endline は、文字列の終わりに改行をつけて出力する。使い方は、こう。

print_endline "Hello";;

実行例

Hello
- : unit = ()   

print_newline は、改行を出力する。使い方は、こう。

print_newline ();;

実行例


- : unit = ()    

だから、上記コードは、こうなる。

let print_hello s =
    print_string "Hello, ";
    print_string s;
    print_newline ();;

let print_bye s =
    print_string "Bye bye, ";
    print_string s;
    print_newline ();;

実行例

# print_hello "Suzuki";;
Hello, Suzuki
- : unit = ()

# print_bye "Suzuki";;
Bye bye, Suzuki
- : unit = ()