【问题标题】:Common uses of letrec, named let and internal defines?letrec、named let 和 internal 定义的常见用法?
【发布时间】:2011-04-13 19:14:27
【问题描述】:

我有几本关于 Scheme 的书,其中一些提到了名为 let 和 letrec,但实际上没有一本能给出令人信服的例子(我的意思是,我什么时候以及为什么要使用其中一个而不是另一个)。 有没有 letrec/named let 确实比内部定义甚至外部辅助过程更好的选择的例子?

【问题讨论】:

    标签: scheme


    【解决方案1】:

    你使用哪一个主要是风格问题。

    我发现自己不经常使用letrec,只是更喜欢内部定义。我确实经常使用命名 let 来编写尾递归循环,类似于这个废话循环。

    (let loop ((var init) (other-var other-init))
      (cond
        ((done? var) var)
        ((finished? other-var) other-var)
        (else (loop (modify var) (manipulate other-var)))))
    

    您可以使用letrec 或内部定义来做同样的事情,但我发现这个最容易阅读。

    letrec 在宏扩展到您不想创建定义的地方时很有用。

    【讨论】:

      【解决方案2】:

      对于这些表格之间的区别,您能找到的最佳解释可能是this

      【讨论】:

        猜你喜欢
        • 2013-05-07
        • 2012-01-29
        • 2020-07-24
        • 1970-01-01
        • 2018-10-31
        • 1970-01-01
        • 2018-11-10
        • 2020-11-08
        • 2012-05-31
        相关资源
        最近更新 更多