【发布时间】:2020-02-16 00:52:15
【问题描述】:
在“The Scheme Programming Language 4th Edition” 3.3 节Continuations 中给出了以下示例:
(define product
(lambda (ls)
(call/cc
(lambda (break)
(let f ([ls ls])
(cond
[(null? ls) 1]
[(= (car ls) 0) (break 0)]
[else (* (car ls) (f (cdr ls)))]))))))
我可以确认它在 chezscheme 中有效:
> (product '(1 2 3 4 5))
120
上面let中的'f'是什么?为什么给定的ls 被分配给它自己?它似乎与我对 (let ...) 的理解不符,如 4.4 local binding 中所述:
syntax: (let ((var expr) ...) body1 body2 ...)
如果这里定义了“f”,我希望它在括号/方括号内:
(let ([f some-value]) ...)
【问题讨论】:
标签: syntax binding scheme lisp let