複数の引数

 

引数が複数の関数を定義したかったら、二通りのやり方があります。一つは、引数を(x, y)のようなにして受け取るやり方です。

 

# let distance (x, y) = sqrt (x *. x +. y *. y) ;;

val distance : float * float -> float = <fun>

# distance (3.0, 4.0) ;;

- : float = 5.

 

distancefloat * float -> floatという型を与えられます。これは「floatfloatの組を受け取ってfloatを返す関数」という意味です。

 

もう一つは、引数を一つずつ順に受け取るやり方です。

 

# let distance x y = sqrt (x *. x +. y *. y) ;;

val distance : float -> float -> float = <fun>

# distance 3.0 4.0 ;;

- : float = 5.

 

このfloat -> float -> floatという型は「二つのfloatを一つずつ順に受け取って、floatを返す関数」という意味です。

 

OCamlでは、どちらかといえば後者が普通のスタイルとされています(カリー化といいます)。前者と後者では型が違うので、混同できないことに注意してください。

 

# let distance x y = sqrt (x *. x +. y *. y) ;;

val distance : float -> float -> float = <fun>

# distance (3.0, 4.0) ;;

Characters 9-19:

  distance (3.0, 4.0) ;;

           ^^^^^^^^^^

This expression has type float * float but is here used with type float

 

次へ進む