10

let、let* 和 letrec 有什么区别?

请给出详尽的解释和例子。

4

1 回答 1

16

最好的办法是阅读、和的官方 R5RS 描述letlet*letrec

然而,简而言之:

(let ((x 2))
 (let ((x 3) (y x))
  y) => 2

(let ((x 2))
 (let* ((x 3) (y x))
  y) => 3

let因此,和let*is之间的区别let将评估与上述级别相关的所有绑定(因此它们列出的顺序无关紧要),同时let*按顺序进行。(let* ((x a) (b y)))相当于(let ((x a)) (let ((b y)))

letrec,另一方面,允许您绑定递归值。因此,您可能会编写一个只希望在函数范围内的递归函数,并将其绑定到使用letrec.

于 2013-05-13T20:45:19.007 回答