我有几本关于Scheme的书,其中一些提到了let和letrec,但实际上没有一个会给出一个令人信服的例子(我的意思是,何时以及为什么我会使用一个而不是另一个)。 是否存在letrec / named let实际上比内部定义或外部辅助过程更好的替代方案的例子?
答案 0 :(得分:7)
你使用哪一个主要是风格问题。
我没有经常使用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
会很有用。
答案 1 :(得分:0)
您可以找到关于这些表单之间差异的最佳解释是this。