つぎの関数を考えてみましょう。
(lambda (a b c) (+ a b c))
この関数を呼び出すには、つぎのように式のcarにこの関数を書きます。
((lambda (a b c) (+ a b c)) 1 2 3)
この呼び出しは、変数a
には1、変数b
には2、
変数c
には3を束縛し、ラムダ式の本体を評価します。
本体の評価ではこれらを加算し、結果6を生じます。
したがって、この関数呼び出しは6を返します。
つぎの例のように、他の関数呼び出しの結果が引数になることもあります。
((lambda (a b c) (+ a b c)) 1 (* 2 3) (- 5 4))
これは、引数、1
、(* 2 3)
、(- 5 4)
を
左から右へ順に評価します。
そして、引数値、1、6、1にラムダ式を適用し、値8を生じます。
このようにフォームのcarとしてラムダ式を書くのは、
あまり便利ではありません。
スペシャルフォームlet
(see Local Variables)を使って、
ローカル変数を作ってそれらに値を与えても、同じ結果を得られます。
さらに、let
は見通しがよく使いやすいです。
実用上、ラムダ式は、シンボルの関数定義として格納して名前付き関数を作るか、
他の関数に引数として渡します(see Anonymous Functions)。
しかしながら、スペシャルフォームlet
がなかった初期のLispでは、
ラムダ式を明示的に呼び出すことはとても便利でした。
その頃では、ラムダ式はローカル変数を束縛し初期化する唯一の方法でした。