首页 文章

letrec的常见用法,名为let和internal定义?

提问于
浏览
4

我有几本关于Scheme的书,其中一些提到名为let和letrec,但实际上没有一个会给出一个令人信服的例子(我的意思是,何时以及为什么我会使用一个而不是另一个) . 是否存在letrec / named let实际上比内部定义或外部辅助过程更好的替代方案?

2 回答

  • 0

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

    我不经常使用 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 会很有用 .

  • 7

    您可以找到关于这些形式之间差异的最佳解释是this .

相关问题