スコープ
前にも書いているけど、スペシャル変数は「ダイナミックスコープ」だから「あらゆる環境を超えて一意の値」となっているだけの話。
Source of Nothingness - 2007-04-26
グローバル環境に登録されたレキシカルスコープの変数ときちんと区別していないから、混乱するってだけの話ではないのかな。
と指摘を頂いて、まったくその通りなのです。
つーわけでググってみたりいぢってみたりして、自分なりにまとめでも書いておこうかと思ったら Shiro さんがきれーにまとめてくれてた。
と思ってたけど、要するに、
http://white.s151.xrea.com/wiki/index.php?diary%2F2006-10-11%2F%A5%B9%A5%B3%A1%BC%A5%D7%A4%CB%A4%C4%A4%A4%A4%C6
スペシャル=ダイナミック=動的バインディング と
ローカル=レキシカル=静的バインディング が対になってて、
バッファローカルとバッファグローバルが対になってる感じ?きっと。
バッファ(ローカル|グローバル)はまだよくわかんないけど、スペシャル変数をバッファローカルにする方法が無さそう。一旦スペシャルにしちゃったら make-local-variable しても make-variable-buffer-local してもその後 setq とかしても local-variable-p が t にならない。スペシャル変数=バッファグローバルってことで良さそう。