首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在读取器宏内使用时,read的递归-p参数

在读取器宏内使用时,read的递归-p参数
EN

Stack Overflow用户
提问于 2021-09-20 01:23:13
回答 1查看 55关注 0票数 2

我已经编写了Scheme表达式注释(SRFI 62)的Common Lisp实现:

代码语言:javascript
复制
(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))))

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-20 06:48:36

作为一个不正确行为的例子,让我们考虑RECURSIVE-P argument documentation中给出的三个原因中的第一个。首先,使用您的原始定义:

代码语言:javascript
复制
* (+ 1 #1=2 #;(+ #1# 3))
Reader error: Missing #1# label.

(read stream)更改为(read string t nil t)会得到正确的结果:

代码语言:javascript
复制
* (+ 1 #1=2 #;(+ #1# 3))
3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69248229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档