elispの勉強 lambda式など
- 「lambda」は特別なシンボル。
- シンボル lambda が先頭にあるリストは、関数定義と見なされる。
- そして、そのようなリストは評価されるとそれ自身になる。
- ただし、関数定義として妥当な形式を持ってないと適用される時にエラーになる
>> ((lambda (x y) (+ x y)) 1 2) 3 ; (lambda ...)が評価され関数(lambda ...)になって、引数 1 2 に適用される >> (lambda 1) (lambda 1) ; シンボル lambda が先頭にあるリストは評価されると自分自身 >> (quote lambda) lambda >> ((quote lambda) 1) *** Eval error *** Invalid function: (quote lambda) ; (quote lambda) は確かにシンボルlambdaを返すんだけど、 ; リストの先頭にあるために評価されない。 >> (setq lambda 1) 1 ; シンボルなので、値を束縛しても良い >> (lambda 1) (lambda 1) ; 値が束縛されていようがなんだろうが、 ; リストの先頭にある時の特別扱いはそのまま