scheme - letrec、named let 和 internal 定义的常见用途?

标签 scheme

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

最佳答案

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

我发现自己不使用 letrec很多时候,只是更喜欢内部定义。我确实经常使用 named 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当宏扩展到您不想创建定义的地方时,它会很有用。

关于scheme - letrec、named let 和 internal 定义的常见用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736796/

相关文章:

scope - 在 Scheme 的 lambda 中使用 let 变量

recursion - 如何返回具有不同值的列表?

recursion - 方案 - foo(x y) 没有调用递归调用

scheme - 函数中的变量

for-loop - For循环在Scheme中如何工作?

scheme - 如何(eval ...)在鸡 r7rs 库中?

scheme - IronScheme 是否适合通过 SICP 工作?

scheme - 在方案中构建哈夫曼树

scheme - Racket - lang plai - 定义类型和类型案例解释

scheme - 使用 Gambit-C 编译方案