Schemeでlambda式を書く
lambda式を使用することで、無名関数を作成することができる。
一般形
(lambda (引数1 引数2 ・・・ 引数n) (式))
例
> (lambda (x) (* x x)) ;xの2乗を返す無名関数 #<procedure>
lambda式の基本的な呼出し
関数を呼び出す場合、通常はその関数名を指定することで呼び出すが、無名関数の場合は、そもそも関数名が存在しないため、通常の関数のように呼び出すことはできない。lambda式で作成した無名関数を呼び出すには以下のように記述する。
例
> ((lambda (x) (* x x))3) ;xの2乗を返す無名関数 9
define式とlambda式
以下のdefine式は、ラムダ式で定義された関数がsquareという名前になる。
; xの2乗を返す (define square (lambda (x) (* x x)))
したがって、上記のdefine式は以下のdefine式と同様の動作を行う。
; xの2乗を返す (define (square x) (* x x))
lambda式を引数に指定する
Schemeでは、関数の引数に関数を指定できる。(高階関数)
lambda式を引数として渡した場合、呼び出された側の仮引数によってlambda式に名前がつけられる。
例
; val1の2乗とval2の2乗の和を返す (define (lambda-test val1 val2) (double-add (lambda (x) (* x x)) val1 val2)) ; (lambda (x) (* x x))にfuncという名前がつけられる (define (double-add func val1 val2) (+ (func val1) (func val2))) ; 実行例 > (lambda-test 2 3) 13