【问题标题】:Scheme: When to use let, let*, and letrec? [duplicate]方案:何时使用 let、let* 和 letrec? [复制]
【发布时间】:2013-05-07 23:42:11
【问题描述】:

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

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

【问题讨论】:

    标签: scheme let


    【解决方案1】:

    您最好阅读letlet*letrec 中的official R5RS descriptions

    然而,简而言之:

    (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 的名称。

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 2015-11-17
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2012-03-08
      • 2020-07-24
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多