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