Common Lispではdefvarを使ってグローバル変数を作ると、 その変数はスペシャル変数となり、無限スコープと動的エクステントを持つようになります。 (defvar *special* 99) (defun f () (let ((*special* 1)) (g *special*))) (defun g (x) (+ x *special*)) 上のプログラムから分かるように、*special*はどこからでも参照できます(無限スコープ)。 関数fのletにて、*special*に新たな値を設定すると、そのletを抜けるまでの間、 *special*の値は1に変わります(動的エクステント)。 よって、fのletがgにも影響して、 (f) => 2 となります。 しかし、これが正しく動作するのは*special*がスペシャル変数であるということを 処理系が知っているからです。関数f