[xyzzy:08982] Re: popup-list と変数のスコープ
- Subject: [xyzzy:08982] Re: popup-list と変数のスコープ
- From: southly <southly@xxxxxxxxxxxx>
- X-mailer: AL-Mail32 Version 1.13
こんにちは、NANRIです。
> Common Lisp Hyper Spec に拠りますと、
> special 宣言した変数に対し内部で新たに束縛が発生した場合、
> 改めて宣言しなかったらその新しい束縛の内部では
> レキシカル変数として扱われる、となっています。
これは理解できます。
しかし、先の例で num は特に束縛していないというのが自分の認識なのですが。
popup-listを使わない、例えば以下のようなコードだと自分の期待通り
num は 11 になってます。
(progn
(setq num 0)
(defun foo2 (num) (declare (special num)) (func))
(defun func () (baz "abc"))
(defun baz (x) (format t "~A and ~D" x num))
(foo2 11))
abc and 11
NIL
この結果は CLISP でも同じだったので正しいのだと思います。
先の例とこのコードとを比べると num の値が異なるのは
popup-list が原因だという気がします。
いろいろ試した結果、
popup-listの式の中では*standard-output*も変わる事が分かりました。
やはりpopup-listは特殊というのが自分の結論です。
稲泉さんが教えてくださった解決策は、勉強になりました。
ありがとうございました。
-----
南里 征興(NANRI Masaoki)
southly@xxxxxxxxxxxx