lambdaの役目

lambdaってのはオペレータではなくただのシンボルで,それはリストが関数であるかどうかを見分けるために,昔のLispの方言で使用されていたものだそうで.

> (lambda (x) (+ x 1))
#<FUNCTION :LAMBDA (X) (+ X 1)>

んで,関数を定義するdefunは,マクロ.ということは?

> (setf a (lambda (x) (+ x 1)))
#<FUNCTION :LAMBDA (X) (+ X 1)>

こんな感じに,変数にlambdaを入れちゃったら関数として呼び出したりできるのかしら,と思ったのだけれど,

> (a 1)
*** - EVAL: undefined function A
The following restarts are available:
……

とまぁこのようにエラー表示が.そんな生易しいもんじゃない*1.思い出してみると,Common Lispでは変数名と関数名は,別々のテーブルが所持してるんだよね.だから,aはただの変数でしかないわけで,関数っぽく呼び出したかったらfuncallやapplyに頼らなきゃダメなんだなぁ.

> (funcall a 1)
2
> (apply a '(1))
2

Schemeなら変数名と関数名は同じところで持ってるし,呼び出せたりするのかしら?処理系が無いから解んないけど.

*1:defunマクロの中身が見たくなる.Lispではない?