Common Lispのソースで日本語を使う
あまり考えたことが無かったのですけど、
Unicodeに対応している処理系だと、
symbol
に日本語が使えます。
次のコードを例に挙げます。
(defun 何回か乗算する (回数 値) (let ((答え 1)) (dotimes (無視 回数 答え) (setq 答え (* 答え 値))))) (何回か乗算する 16 2) -> 65536
これすごいな。
sbcl, clisp, cclでは何事も無く動作します。
nptでは最初は無理でしたが、修正してなんとか動くようにしました。
Unicodeには対応しているので少しの修正で何とかなりました。
方法は、read
実行中に#x80
以上の文字コードに出会ったら
強制的にsymbol
にすると言うもの。
改造中にpotential numberがどうとかやった記憶がよみがえりました。
本来ならどうするべきなのか知りませんが、これでいいでしょう。
みんな大好きなlambda
式はこうなります。
(defmacro ラムダ (&rest args) `(lambda ,@args)) (funcall (ラムダ (★) (* ★ ★ ★)) 123)) -> 1860867
リードマクロを試してみましょう。
(set-macro-character #\㈱ (lambda (s c) (declare (ignore c)) (format nil "株式会社~A" (read s t nil t)))) (format t "~S~%" ㈱コモンリスプ) -> "株式会社コモンリスプ"
正直、見づらい。