一時的にリードテーブルを変更して読み込む - lisp-cookbook-ja/common-lisp GitHub Wiki
一時的にリードテーブルを変更して読み込む
一時的にリードテーブルを変更するには様々は方法が考えられますが、何がリード時に作用するのかを良く考える必要があるでしょう。 下記の例では、一時的に!をquoteに定義してみています。
(let ((*readtable* (copy-readtable))) ;引数を省略するとカレントのものが渡る
(set-syntax-from-char #\! #\')
(eval (read-from-string "!(foo bar baz)")))
;=> (FOO BAR BAZ)
その他の例
(progn
#.(defparameter *rt* *readtable*) ;リード時に作用
#.(set-syntax-from-char #\! #\') ;リード時に作用
(prog1 !(foo bar baz)
#.(setq *readtable* (copy-readtable *rt*)))) ;リード時に作用
;=> (FOO BAR BAZ)