プログラミング言語SML#解説 4.0.0版
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 = fn : 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 = fn : 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)のように使います.