2011-05-07
きょうの「なんでやねん」
xyzzy |
common lisp の教本ばっかり読んでると、シンボルは内部的には大文字になってるんだよなと漠然と思ってた。
なので common な処理系ならなんでも (eq 'HOGE 'hoge ) は t になるんじゃないかと。
xyzzy では下のようになった。
;;; xyzzy (eq 'hoge 'hoge) ;=> t (eq 'HOGE 'hoge) ; おお? 違うのか。 ;=> nil (eq 'nil nil) ;=> t (eq 'NIL nil) ; おおお? ;=> nil
NTEmacs-24 でやったら、xyzzy と同じになった。
ということは、xyzzy は emacs に合わせたんだな。きっと。
ちなみに clozure CL でやってみたら、上記はすべて T だった。
今頃こんなのを書いてること自体あほなんだが、emacs や xyzzy 用に書いたのを他の cl に持っていくときは要注意かもしれず。

(setf (readtable-case *readtable*) :upcase)
但し、この式を評価した後に定義したシンボルしか変換してくれないので、あんまり意味はないかも知れません。
元に戻すには、次の式を評価すればOKです。
(|setf| (|readtable-case| |*readtable*|) :|preserve|)
にしても、元に戻す S式 の 縦棒はもっと謎です…
kuuboさん、ためになるコメントありがとさんでした。
--
Regards,
Hideaki Shishido