(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