在读取器宏中使用时读取的递归 p 参数



我已经写了一个Scheme的s表达式注释的通用Lisp实现(SRFI 62):

(eval-when (:compile-toplevel
:load-toplevel
:execute)
(set-dispatch-macro-character ## #;
(lambda (stream char n)
(declare (ignore char))
(when n
(error "Infix parameter not allowed in s-expression comment."))
(read stream)  ; Discard the s-expression.
(values))))

根据我对RECURSIVE-P参数的阅读,看来我的实现是不正确的。我必须使用(read stream t nil t)代替(即将recursive-p参数设置为t)。我的理解对吗?

我一直在使用上面明显不正确的实现,它似乎正常工作。如果我继续使用(read stream)而不是(read stream t nil t)会发生什么?

对于一个不正确行为的示例,让我们考虑RECURSIVE-P参数文档中给出的三个原因中的第一个。首先,使用您的原始定义:

* (+ 1 #1=2 #;(+ #1# 3))
Reader error: Missing #1# label.

(read stream)更改为(read string t nil t)给出正确的结果:

* (+ 1 #1=2 #;(+ #1# 3))
3

相关内容

  • 没有找到相关文章

最新更新