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显然发现写一个明确的“两个或多个”子句比写“恰好一个”和“一个或多个”子句更干净