【发布时间】:2011-04-13 19:14:27
【问题描述】:
我有几本关于 Scheme 的书,其中一些提到了名为 let 和 letrec,但实际上没有一本能给出令人信服的例子(我的意思是,我什么时候以及为什么要使用其中一个而不是另一个)。 有没有 letrec/named let 确实比内部定义甚至外部辅助过程更好的选择的例子?
【问题讨论】:
标签: scheme
我有几本关于 Scheme 的书,其中一些提到了名为 let 和 letrec,但实际上没有一本能给出令人信服的例子(我的意思是,我什么时候以及为什么要使用其中一个而不是另一个)。 有没有 letrec/named let 确实比内部定义甚至外部辅助过程更好的选择的例子?
【问题讨论】:
标签: scheme
你使用哪一个主要是风格问题。
我发现自己不经常使用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 在宏扩展到您不想创建定义的地方时很有用。
【讨论】:
对于这些表格之间的区别,您能找到的最佳解释可能是this。
【讨论】: