读取语法:## =格式未启用

时间:2018-08-21 05:35:55

标签: racket

我尝试使用The Reader中所述的#‹digit10›{1,8}=#‹digit10›{1,8}#语法,但在使用时收到read-syntax: `#...=` forms not enabled

此代码已在DrRacket REPL中运行,编辑区域中只有#lang球拍,并且在racket程序中通过终端仿真器运行,没有其他参数或(require ...)

racket> (list #1=100 #1# #1#)
    ==> read-syntax: `#...=` forms not enabled

Reading指出参数read-accept-graph确定读者是否将解析图语法。奇怪的是该参数当前设置为#t

racket> (read-accept-graph)
    ==> #t

以下内容确认阅读接受图会改变读者对图形语法的反应:

racket> (parameterize ([read-accept-graph #t])
          (read (open-input-string "(list #1=100 #1# #1#)")))
    ==> '(list 100 100 100)
racket> (parameterize ([read-accept-graph #f])
          (read (open-input-string "(list #1=100 #1# #1#)")))
    ==> string::7: read: `#...=` forms not allowed in `read-syntax` mode

问题似乎是,在球拍读取表达式时,read-accept-graph已绑定到#f,即使在执行这些表达式时可能是#t

TLDR:
在读取包含graph structure的表达式之前,如何将read-accept-graph参数化为#t

1 个答案:

答案 0 :(得分:2)

这个问题的直截了当的回答是,无论read-syntax的当前值如何,在read-accept-graph模式下都不允许读者使用图形表示法。

但是,您的问题有帮助地揭示了两件事:

  1. 最近在Racket v7.0中对阅读器进行的重写打破了遇到非法图形符号时引发的错误消息。第一个错误应显示为`#...=` forms not allowed in `read-syntax` mode,第二个错误应显示为`#...=` forms not enabled,与当前产生的错误相反。

  2. 参考的相关部分“阅读图结构”没有正确记录readread-syntax之间的区别。

我在commit 2a667dc中推出了针对这两个问题的修复程序,该修复程序将包含在Racket v7.1中。