(define-syntax let
(syntax-rules ()
[(_ ((x e) ...) b1 b2 ...)
((lambda (x ...) b1 b2 ...) e ...)]))
我们对let的定义中的单一规则应该是相当不言自明的,但有几点值得一提。首先,let的语法要求body包含至少一个表单;因此,我们指定了b1 b2 ...而不是b ...,这看起来更自然。
为什么使用(b1 b2 ......)在表格上表示?使用(b ...)更自然吗?
答案 0 :(得分:4)
b ...
允许零个或多个表达式,而对于b1 b2 ...
,b1
必须是表达式,而b2 ...
是零个或多个表达式。由于您不希望人们编写无体let
,因此b1 b2 ...
表单会强制执行至少一个正文表达。
你知道正则表达式吗?可以认为b ...
与.*
类似,而b1 b2 ...
更像..*
。