next up previous contents
Next: 7.5 引数の渡し方 Up: 7. 関数 Previous: 7.3.3 追加組み込み関数

7.4 値としての関数

Cmmでは、関数宣言で定義した関数は、変数と同じです。つまり、変数名が関 数名で値として関数の本体をもっている変数とみなされます。

そのため、たとえば、下記のようなプログラムを書くことができます。


func max (a, b) {

if (a > b) a ;
else b ;
}

var MAX = max ;
MAX(2, 5)

上記の例の場合、関数maxの関数本体が、変数MAXに代入されます。このとき、 maxとMAXが同じ関数本体を指し示します。MAXに代入するときに、関数本体が コピーされることはありません。

関数自体を別の関数の引数として渡すことも可能です。


func fact(n) (n == 0) ? 1 : n * fact(n-1) ;

func total(n) (n == 0) ? 0 : n + total(n-1) ;
func exec_and_println(n, fun) {
var result = fun(n) ;
print("Result: ", result) ;
}
exec_and_println(10, fact);
exec_and_println(10, total) ;

また、関数宣言式は、関数そのものを返します。そこで、以下のようなこともできま す。

例2. 階乗計算fact

var kaijou = func fact (n) {

if (n == 0) 1 ;
else n * fact (n - 1) ;
}

kaijou(10) ;


next up previous contents
Next: 7.5 引数の渡し方 Up: 7. 関数 Previous: 7.3.3 追加組み込み関数
Tetsuo Ono
1998-11-05