gpt4 book ai didi

macros - 为什么符号 pat ... 表示方案宏模式中的零个或多个表达式

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:33 26 4
gpt4 key购买 nike

当我阅读时the macro part of The Scheme Programming Language ,它提到当您尝试使用 define-syntax 定义语法扩展时,您应该使用 pat ... 在模式中指定零个或多个表达式。为什么不只使用 ... 表示零个或多个表达式,在这种情况下 pat ... 表示一个或多个表达式?

另外,作者给出的定义如下:

(define-syntax and
(syntax-rules ()
[(_) #t]
[(_ e) e]
[(_ e1 e2 e3 ...)
(if e1 (and e2 e3 ...) #f)]))

为什么不这样写:

(define-syntax and
(syntax-rules ()
[(_) #t]
[(_ e) e]
[(_ e1 e2 ...)
(if e1 (and e2 ...) #f)]))

我已经用一些案例测试了这个定义,我没有发现任何问题。

最佳答案

根据 R6RS , ... 必须始终跟随一些标识符以获得其“零或更多”的含义(它的行为类似于 Kleene star ),因此 ... pat ... 意味着不同的东西:就 syntax-rules 而言,前者只是一个文字 ... 符号。

在您的示例中,两种形式似乎是相同的,但那是因为模式 (_ e1 e2 ...) 仅在有两个或多个连词( 的参数)时触发and) 无论如何,因为第二个模式 (_ e) 已经处理了只有一个合取的情况。它并不总是以这种方式工作,Dybvig 显然发现写一个明确的“两个或多个”子句比“恰好一个”和“一个或多个”子句更清晰。

关于macros - 为什么符号 pat ... 表示方案宏模式中的零个或多个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18895016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com