あれから色々調べてみた結果、何故y0が100を返すのか理解できました。きちんと理解できてるかどうか確認するために、Common Lispにおける変数のスコープについて、できるかぎりの説明をしてみようと思います。 まずC言語における大域変数をグローバル変数、Common Lisp(以下Lisp)における大域変数をスペシャル変数と呼ぶことにします。 Cで変数xが使われた場合、まずローカル変数にxがあるかどうかを見て、なかったときにグローバル変数xの値を参照します。(多分コンパイル時に「どこ」を見るのかは既に決定されていると思いますが、いちおうLispと対比させるための、たとえ話としてお願いします・・) Lispでもまずレキシカル変数xの値があるかどうかを確認し、なかった時にスペシャル変数の値が使われます。 こうしてみるとグローバル変数とスペシャル変数に違いはないように見えますが、実は大きな違い

