我有几本关于 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/