我有几本关于Scheme的书,其中一些提到了let和letrec,但没有一个会给出一个令人信服的例子(我的意思是,什么时候以及为什么要用另一个)。 有没有letrec/named let比内部定义或甚至外部辅助程序更好的选择?letrec的常见用法,名为let和internal定义?
4
A
回答
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
在宏扩展到您不想创建的地方定义时很有用。
0
也许你可以找到这些形式之间的区别最好的解释是this。
相关问题
- 1. 方案:何时使用let,let *和letrec?
- 2. 创建本地绑定的'let'或'letrec'和'define'之间有什么区别?
- 3. Coq定义和Let的区别
- 4. 如何使用let绑定方式在SML中定义常量?
- 5. C#在LINQ中定义LET
- 6. 为什么when-let和if-let默认支持多个绑定?
- 7. 定义操作的let语句(绑定)
- 8. 如果有的话,Scheme中的letrec定义有什么错误?
- 9. 什么是internal :: state :: Entry和它在mesos中定义的位置
- 10. 最常见的实现预定义类的方法。
- 11. UML的常见用法
- 12. 常见的lisp,未定义的交集函数行为?
- 13. 方案:为什么评估在letrec中定义的递归函数失败?
- 14. “let”绑定不适用于后续的“let”绑定?
- 15. 强制常见方法名称
- 16. 定义常见招摇注释
- 17. let在Haskell中的用法
- 18. XSLT - 使用常见的元素名称
- 19. 以实用的方式定义常见外观的模板
- 20. .Net Control.Tag - 常见和不常见的用途
- 21. 为0定义常量和1
- 22. Nashorn - 无法为ScriptObject和MyInterface找到常见的类加载器
- 23. Rails应用程序的常见用法?
- 24. Ruby常见联合名单
- 25. 常见做法 - SplitContainer
- 26. php定义命名常量作为函数名称
- 27. xml常见做法和删除组
- 28. 如何在Haskell的“let”表达式中使用“type”定义值?
- 29. 在对象命名空间中定义和引用常量值?
- 30. 目前常见的做法