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

Sol*_*ves 6 scheme let

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

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

小智 9

最好的办法是阅读官方R5RS描述let,let*letrec.

简而言之,但是:

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

(let ((x 2))
 (let* ((x 3) (y x))
  y) => 3
Run Code Online (Sandbox Code Playgroud)

因此,let和之间的区别将let*let评估与上述级别相关的所有绑定(因此它们列出的顺序并不重要),而let*顺序也是如此.(let* ((x a) (b y)))相当于(let ((x a)) (let ((b y))).

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