我尝试使用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
?
答案 0 :(得分:2)
这个问题的直截了当的回答是,无论read-syntax
的当前值如何,在read-accept-graph
模式下都不允许读者使用图形表示法。
但是,您的问题有帮助地揭示了两件事:
最近在Racket v7.0中对阅读器进行的重写打破了遇到非法图形符号时引发的错误消息。第一个错误应显示为`#...=` forms not allowed in `read-syntax` mode
,第二个错误应显示为`#...=` forms not enabled
,与当前产生的错误相反。
参考的相关部分“阅读图结构”没有正确记录read
和read-syntax
之间的区别。
我在commit 2a667dc
中推出了针对这两个问题的修复程序,该修复程序将包含在Racket v7.1中。