在“ Scheme编程语言第4版”中]第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
f
中的“let
”是什么?为什么给定的ls
被分配给自己?似乎不符合我对4.4(let ...)
中所述的local binding的了解:
syntax: (let ((var expr) ...) body1 body2 ...)
如果在这里定义'
f
',我希望它在括号/方括号内:
(let ([f some-value]) ...)
在“ Scheme编程语言第4版”的第3.3节中,给出了以下示例:(定义乘积(lambda(ls)(调用/ cc(lambda(break))(let f([ls ls])...] >
这是'命名为let',在语法上很方便。
(let f ([x y] ...)
...
(f ...)
...)
[f
绑定到以let
的主体为主体,ls
为参数的过程。