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)
; 値が束縛されていようがなんだろうが、
; リストの先頭にある時の特別扱いはそのまま