1
(define-syntax let  
  (syntax-rules ()  
    [(_ ((x e) ...) b1 b2 ...)  
     ((lambda (x ...) b1 b2 ...) e ...)]))  

我们对 let 的定义中的单一规则应该是不言自明的,但有几点值得一提。首先,let 的语法要求正文至少包含一种形式;因此,我们指定了 b1 b2 ... 而不是 b ...,这可能看起来更自然。

为什么使用 (b1 b2 ...) 来表示形式上的租约?使用 (b ...) 更自然吗?

4

1 回答 1

4

b ...允许零个或多个表达式,而 forb1 b2 ...必须b1是一个表达式,而 whileb2 ...是零个或多个表达式。由于您不希望人们编写 bodyless let,因此该b1 b2 ...表单强制执行至少一种身体表达。

你知道正则表达式吗?认为b ...是类似的.*,而b1 b2 ...更像是..*

于 2013-04-08T15:19:37.900 回答