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