方案:何时使用let,让*和letrec?

时间:2013-05-13 20:27:32

标签: scheme let

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

请提供详尽的解释和示例。

1 个答案:

答案 0 :(得分:7)

最好的办法是阅读letlet*letrec的{​​{3}}。

简而言之:

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

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

因此,letlet*之间的差异let将评估与上述级别相关的所有绑定(因此,它们列出的顺序无关紧要)虽然let*按顺序执行。 (let* ((x a) (b y)))相当于(let ((x a)) (let ((b y)))

另一方面,

letrec允许您绑定递归值。因此,您可以编写一个递归函数,只希望它位于函数范围内,并使用letrec将其绑定到名称。