(Redirected from basics(ja))
OCamlのコメントは(*
と *)
で囲まれた部分である。
(* これは一行だけのコメント *) (* これは * 複数行に渡る * コメント *)
別の言い方をすると、コメントの仕方はCに昔からあるコメント文によく似ている。(/* ... */
)
さて、何か関数を定義したとしよう。例えばrepeated
という関数を定義したとする。これは文字列s
と整数n
を引数にとり、s
をn
回繰り返した新しい文字列を返す関数とする。
Cに由来するほとんどの言語では、この関数を呼び出すときにはこのようにする。
repeated ("hello", 3) /* Cコード*/
これは、「関数repeated
を2つの引数により呼び出す。最初の引数は文字列helloであり、二番目の引数は3である」ことを意味する。
ところが、OCamlやその他の関数型言語では関数呼び出しを違ったように書く。特に括弧のつけ方が異なり、間違いの元になりやすい。上と同じ関数呼び出しをOCamlで書くと、
repeated "hello" 3 (* OCamlコード *)
括弧がないこと、引数の間のコンマがないことに注意しよう。
ややこしいことに、repeated ("hello", 3)
はOCamlでちゃんとした意味がある。これは「関数repeated
を一つの引数で呼び出す。引数は文字列helloと整数3の組である。」を意味する。もちろんこれは誤りである。repeated
は2つの引数を取り、しかも最初の引数は文字列であって組ではないからだ。しかしとりあえず組(tuple)については考えないことにしよう。まず引数のまわりを括弧でくくらないこと、引数をコンマで分けないことを覚えよう。
さて次に別の関数を考えよう。get_string_from_user
はユーザーから文字列の入力を受け、入力された文字列を返す関数である。この関数の戻り値をrepeated
に渡したい。CとOCamlのコードを比較しよう。
/* Cコード: */ repeated (get_string_from_user ("Please type in a string."), 3)
(* OCamlコード: *) repeated (get_string_from_user "Please type in a string.") 3
括弧のつけ方とコンマの有無に注意してほしい。一個で言うと「関数呼び出し全体を括弧でくくる。引数の周りには括弧はつけない。」ということになる。さらに例を示そう。
f 5 (g "hello") 3 (* fの引数は3つ。gは一つ *) f (g 3 4) (* fの引数は一つ。gは2つ。*) # repeated ("hello", 3);; (* エラーになる。 *) This expression has type string * int but is here used with type string