lambda 式とは?


今回も、lambda 式の使用に関して制限をはずすために、 Advanced Mode などに変更をしておいて下さい。
lambda 式とは、関数を式の形で表したものです。 今までは、関数を記述するには、
 (define (func args) body) 
として定義して、 その関数名を用いるしかありませんでした。 例えば、整数のリストを受け取り、すべての要素を 1 増やす関数を書きたければ、 以下のように、まず1+ という関数を定義して、 そのうえで先ほど定義した1+をmap 関数の引数として使うことになります。
(define (1+ x) (+ x 1))
(define (1+-list x) (map 1+ x))
Scheme を含め Lisp には、lambda 式 をもちいて、関数を意味する式を書くことが出来ます。 これは、ラムダ計算という 計算モデルに由来するものです。
        (lambda (x) (+ x 1))
というのは、 x をうけとり、 (+ x 1) を返す関数を表した式です。 先程の関数は、lambda 式を用いると、
(define (1+-list x) (map (lambda (x) (+ x 1)) x))
と記述出来ます。 lambda 式は普通の式ですから、こんな感じでも当然使えます。
> (let ((p (lambda (x y z) (* x (+ y z)))))
    (p 1 2 3))
5

lambda 式の良く用いられる形は、

        (lambda (args) expression)
という形をしており、これは args を引数としてとり expression を評価する関数となっています(詳細情報)。

実は、

        (define (func args...) expression)
と書くのと、
        (define func (lambda (args...) expression))
と書くのではおなじ事です。

99.10.7/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp