不寻常的“ let”绑定,什么是“ f`?

问题描述 投票:1回答:2

“ 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])...] >

syntax binding scheme lisp let
2个回答
1
投票

这是'命名为let',在语法上很方便。

(let f ([x y] ...)
  ...
  (f ...)
  ...)

1
投票

[f绑定到以let的主体为主体,ls为参数的过程。

© www.soinside.com 2019 - 2024. All rights reserved.