【发布时间】:2014-01-06 07:49:06
【问题描述】:
标准 common-lisp 定义了许多阅读器宏,例如 ( 和 ) 用于分组,' 用于 quote," 用于字符串引用,| 用于符号引用,# 用于调度宏等。现在我想全部禁用它们并使用我自己的,我必须一一调用set-macro-character将它们全部禁用然后定义我自己的。
我发现有一种方法可以通过调用(setf *readtable* (copy-readtable nil)) 将所有阅读器宏恢复为标准宏,但是有没有办法将它们设置为空(即,所有字符都被视为普通字母和数字)?
【问题讨论】:
-
一个空的 readtable 会做什么?它可能真的是空的,然后你就什么也读不出来了。 “所有字符都被视为普通字母和数字” - 那是什么意思? READ 会组装符号和数字吗? Readtable是reader的配置,主要由READ调用。
-
@RainerJoswig 我正在尝试将 lisp 转换为纯 lambda 演算解释器,仅用于学习目的。我想使用小写字母以及其他一些字符(例如,
'、|、#)作为符号名称,所以我必须这样做。 -
手动解析或者用解析器生成器解析,没那么难。