Ch.7 MLプログラミング入門

§ 7.8. 複数の引数を取る関数

前節のpower関数はあらじめ定義された定数Cの指数乗を計算す る関数でしたが,では,この指数の底Cも引数に加え,nC を受け取ってCn乗を計算する関数を定義するにはどうしたらよい でしょうか. これには,2つの書き方があります. 以下の対話型セッションでは,その型情報とともに示します.

# fun powerUncurry (0,C) = 1
>   | powerUncurry (n,C) = C * powerUncurry(n - 1, C)
val powerUncurry : int * int -> int
# powerUncurry (2, 3);
val it = 9 : int
 
# fun powerCurry 0 C= 1
>   | powerCurry n C = C * (powerCurry (n - 1) C)
val powerCurry : int -> int -> int
# powerCurry 2 3;
val it = 9 : int

powerUncurryの型情報int * int -> intは,引数を組として 受け取り整数を返す関数であることを示しています. これに対してpowerCurryの型情報int -> int -> intは, 引数を2つ順番に受け取り整数を返す関数であることを示しています. 上の例から想像される通り,MLでは関数定義の引数は,その関数が使わ れる形で書きます. 例えばpowerUncurryfun powerUncurry (C,n) = ...と定 義されていますから,powerUncurry(2,3)のように使います.