Function COPY-READTABLE
copy-readtable &optional from-readtable to-readtable => readtable
from-readtable - readtable指定子。デフォルトは現在のreadtable。
to-readtable - readtableか、nil。 デフォルトはnil。
readtable - to-readtableがnilではないとき、to-readtable。 そうではないときは新しいreadtable。
copy-readtableは、from-readtableをコピーします。
to-readtableがnilのときは、 新しいreadtableが生成されて返却されます。 そうではないときは、 指定したto-readtableが修正されて返却されます。
copy-readtableは、readtable-caseの設定をコピーします。
(setq zvar 123) => 123
(set-syntax-from-char #\z #\' (setq table2 (copy-readtable))) => T
zvar => 123
(copy-readtable table2 *readtable*) => #<READTABLE 614000277>
zvar => VAR
(setq *readtable* (copy-readtable)) => #<READTABLE 46210223>
zvar => VAR
(setq *readtable* (copy-readtable nil)) => #<READTABLE 46302670>
zvar => 123なし。
なし。
(setq *readtable* (copy-readtable nil))上記の式は、入力構文を Common Lisp標準の構文に復元することができ、 初期のreadtableが壊れているときでも動作します (上記の式を入力できないほど 壊れているわけではないことを想定しています)。
一方、
(setq *readtable* (copy-readtable))上記の式は、現在のreadtable自身をコピーしてそれを置き換えます。 これは、readtableを変更している間から保護するために、 後で使うreadtableをコピーして保存したいときに便利です。 また、readtableをコピーして それ自身を局所的に束縛したいときは、 次のようにするのが便利です。
(let ((*readtable* (copy-readtable))) ...)