2013-04-08 3 views
1
(define-syntax let 
    (syntax-rules() 
    [(_ ((x e) ...) b1 b2 ...) 
    ((lambda (x ...) b1 b2 ...) e ...)])) 

Единственное правило в нашем определении аренды должны быть понятны сами по себе, но несколько моментов, о которых стоит упомянуть. Во-первых, синтаксис let требует, чтобы тело содержало хотя бы одну форму; следовательно, мы указали b1 b2 ... вместо b ..., что может показаться более естественным.схема определения синтаксических формы тела

Зачем использовать (b1 b2 ...) для представления при сдаче в аренду по форме? что использование (b ...) более естественное?

ответ

4

b ... позволяет ноль или более выражений, тогда как для b1 b2 ..., b1 требуется, чтобы быть выражением, в то время как b2 ... это ноль или более выражений. Поскольку вы не хотите, чтобы люди писали bodyless let, форма b1 b2 ... обеспечивает выполнение хотя бы одного выражения тела.

Вы знакомы с регулярными выражениями? Подумайте о b ... как аналогичный .*, тогда как b1 b2 ... больше похож на ..*.

Смежные вопросы