当我阅读方案编程语言的宏部分时,它提到当您试图使用define-syntax定义语法扩展时,应该使用pat ...在模式中指定零或多个表达式。为什么不直接将...用于零或多个表达式,在这种情况下,pat ...意味着一个或多个表达式?
此外,当作者将and的定义定义如下:
(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)]))我已经用一些案例测试了这个定义,但我没有发现任何问题。
发布于 2013-09-19 13:01:34
按照R6RS,...必须始终跟随某些标识符才能获得“0或更多”的含义(它的行为类似于克莱恩星),因此...和pat ...的含义不同:就syntax-rules而言,前者只是一个文字...符号。
在您的示例中,这两种表单似乎都是相同的,但这是因为模式(_ e1 e2 ...)只在有两个或多个连词(and的参数)时才会触发,因为第二个模式(_ e)已经处理了只有一个结束符的情况。它并不总是这样工作,Dybvig显然发现写一个明确的“两个或多个”子句比“确切地一个”和“一个或多个”子句更干净。
https://stackoverflow.com/questions/18895016
复制相似问题