letrec的常见用法,命名let和内部定义? [英] Common uses of letrec, named let and internal defines?

查看:17
本文介绍了letrec的常见用法,命名let和内部定义?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有几本关于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或内部定义执行相同的操作,但我发现这个定义最容易阅读。

letrec在将宏展开到您不想创建定义的位置时非常有用。

这篇关于letrec的常见用法,命名let和内部定义?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆