[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:08982] Re: popup-list と変数のスコープ



こんにちは、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

Index Home