Scheme letrec、命名let和内部定义的常见用途?

Scheme letrec、命名let和内部定义的常见用途?,scheme,Scheme,我有几本关于Scheme的书,其中一些提到了名为let和letrec,但没有一本能给出令人信服的例子(我的意思是,何时以及为什么我会使用其中一本来代替另一本)。 在某些情况下,与内部定义甚至外部辅助过程相比,letrec/named let真的是更好的选择吗?您使用哪种方法主要是风格问题 我并不经常使用letrec,只是更喜欢内部定义。我确实经常使用命名let来编写尾部递归循环,类似于这个无意义循环 (let loop ((var init) (other-var other-init))

我有几本关于Scheme的书,其中一些提到了名为let和letrec,但没有一本能给出令人信服的例子(我的意思是,何时以及为什么我会使用其中一本来代替另一本)。
在某些情况下,与内部定义甚至外部辅助过程相比,letrec/named let真的是更好的选择吗?

您使用哪种方法主要是风格问题

我并不经常使用
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
或内部define执行相同的操作,但我发现这是最容易阅读的


当宏扩展到不希望创建定义的位置时,
letrec
可能很有用。

关于这些表单之间的差异,您可以找到最好的解释是