Macros 为什么是帕特。。。表示scheme宏模式中的零个或多个表达式
当我阅读时,它提到当您试图使用Macros 为什么是帕特。。。表示scheme宏模式中的零个或多个表达式,macros,lisp,scheme,Macros,Lisp,Scheme,当我阅读时,它提到当您试图使用define syntax定义语法扩展时,应该使用pat…在模式中指定零个或多个表达式。为什么不直接使用…来表示零个或多个表达式,在这种情况下pat…表示一个或多个表达式 此外,当作者给出和的定义时,如下所示: (define-syntax and (syntax-rules () [(_) #t] [(_ e) e] [(_ e1 e2 e3 ...) (if e1 (and e2 e3 ...) #f)])) 为什么不这样
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)]))
我已经在一些案例中测试过这个定义,但没有发现任何问题。Per,..
必须始终跟随某个标识符才能获得其“零或多”含义(其行为类似于),因此,…
和pat…
意味着不同的东西:就语法规则而言,前者只是字面上的…
符号
在您的示例中,这两种形式似乎相同,但这是因为模式(e1 e2…
仅在存在两个或多个连接(指向和
的参数)时才会触发,因为第二种模式(e)
已经处理了只有一个连接的情况。它并不总是这样工作,Dybvig显然发现写一个明确的“两个或多个”子句比写“恰好一个”和“一个或多个”子句更干净