以下の例を考えてみてください:
(lambda (a b c) (+ a b c))
以下のようにfuncall
に渡すことにより、この関数を呼び出すことができます:
(funcall (lambda (a b c) (+ a b c)) 1 2 3)
この呼び出しは変数a
に1、b
に2、c
に3をバインドして、ラムダ式のbodyを評価します。bodyの評価によってこれら3つの数が加算されて、6が結果として生成されます。したがってこの関数呼び出しにより6がリターンされます。
以下のように引数は他の関数の結果であってもよいことに注意してください:
(funcall (lambda (a b c) (+ a b c)) 1 (* 2 3) (- 5 4))
これは引数1
、(* 2 3)
、(- 5
4)
を左から右に評価します。その後ラムダ式に引数1、6、1を適用して値8が生成されます。
これらの例が示すように、ローカル変数を作成してそれらに値を与えるフォームとして、CARがラムダ式であるようなフォームを使用することができます。古い時代のLispでは、この方法がローカル変数をバインドして初期化する唯一の方法でした。しかし現在ではこの目的にはフォームlet
を使用するほうが明解です(ローカル変数を参照)。ラムダ式は主に他の関数の引数として渡される無名関数(無名関数を参照)として、あるいは名前つき関数(関数の命名を参照)を生成するためにシンボルの関数定義に格納するために使用されます。