【问题标题】:How to set *readtable* to an empty one in common-lisp?如何在 common-lisp 中将 *readtable* 设置为空?
【发布时间】: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 演算解释器,仅用于学习目的。我想使用小写字母以及其他一些字符(例如,'|#)作为符号名称,所以我必须这样做。
  • 手动解析或者用解析器生成器解析,没那么难。

标签: common-lisp reader-macro


【解决方案1】:

我认为没有办法。期望是您只是对 Lisp 阅读器进行增量修改,而不是试图大规模替换它。它并不是真正设计为以这种方式使用的,因为您不能将所有内容都定义为宏——大多数组成字符都与无法定义为阅读器宏的内置行为相关联。

【讨论】:

    猜你喜欢
    • 2015-12-12
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多