次: , 前: Lambda Components, 上: Lambda Expressions


11.2.2 簡単なラムダ式の例

つぎの関数を考えてみましょう。

     (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では、 ラムダ式を明示的に呼び出すことはとても便利でした。 その頃では、ラムダ式はローカル変数を束縛し初期化する唯一の方法でした。