[xyzzy:02930] Re: JIS でクリップボードに送りたい。
- Subject: [xyzzy:02930] Re: JIS でクリップボードに送りたい。
- From: masahito henmi <henmi@xxxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
HATTORI Masashi <hattori@xxxxxxxxxxxxxxxx> さん、こんにちは。masahito です。
|> (declare (special *kanji-expected-code*))
|
|すみません。この"declare"と"special"って何をするものなんでしょう。
http://www.netlaputa.ne.jp/~henmi/lisp/xyzzy/etc/resource.html
のLISP関数リファレンスとinfo-modokiをダウンロードすると
少しはいい事があるかもしれません。
・・・・あなたが理解できるかどうかを保証するものではありません^^;
たとえば、lispモードや*scratch*でlispを書いているときに
declareと書いてF1を押すと以下のような説明が表示されます。
■declare
(declare (special 変数名))
> これは関数ではなくてスペシャル宣言というやつで、動的に bind し
> ろってことです。emacs ではそもそも動的にしか bind できないので、
> これは存在しません。
では、もうちょっと初心者向けに説明。
(setq x 0) ; 大域変数
(defun foo (x)
(+ x y) <---- ※
)
(defun boo (y)
(foo 12)
)
とあったときに、 (boo 34)と呼び出すと
古いLISPでは(Emacs lispを含む)
※の時点で y = 34, x = 12と見えるのです。
ところが、Commonlispやxyzzyでは
※の時点で y = 34, x = 0と見えるのです。
昔LISPはインタープリタだったので、動的バインディング
でもよかったんだけど、
コンパイラを作る時に、効率上なにかと問題があってCommonLisp
では、静的バインディングに変更になりました。
でも、そうすると、古いコードを移植するのが大変になるので、
(defun boo (y)
(declare (special y))
(foo 12)
)
と書いてやると古いLISPのように動くという訳。
------------------------------------------------------------
逸見雅人 Masahito Henmi henmi@xxxxxxxxxxxxx
♪あなたの願いも仕事もうまくいきますように・・・