Next: Argument List, Previous: Lambda Components, Up: Lambda Expressions [Contents][Index]
以下の例を考えてみてください:
(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がreturnされます。
以下のように、引数は他の関数の結果であってもよいことに注意してください:
(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
を使用するほうが明解です(Local Variablesを参照してください)。ラムダ式は主に、他の関数の引数として渡される無名関数(Anonymous Functionsを参照してください)として、あるいは名前つき関数(Function Namesを参照してください)を生成するためにシンボルの関数定義に格納するために使用されます。