标准公共lisp定义了许多读取器宏,如用于分组的(
和)
,用于quote
的'
,用于字符串引用的"
,用于符号引用的|
,用于调度宏的#
等。现在我想全部禁用它们并使用我自己的宏,我必须逐个调用set-macro-character
来全部禁用它们,然后定义我自己的。
我发现有一种方法可以通过调用(setf *readtable* (copy-readtable nil))
将所有阅读器宏恢复为标准宏,但有没有方法可以将它们设置为空(即,所有字符都被视为普通字母和数字)?
我认为没有办法。期望的是,您只是对Lisp阅读器进行增量修改,而不是试图大规模替换它。它并不是真的被设计成这样使用的,因为你不能把所有的东西都定义为宏——大多数组成字符都与无法定义为阅读器宏的内置行为相关。