我有幾本關於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. 例如,letrec/letrec *比使用內部定義或命名let更好嗎?
- 3. 使用xjc和綁定定義常見XSD的包名稱
- 4. 創建本地綁定的'let'或'letrec'和'define'之間有什麼區別?
- 5. Coq定義和Let的區別
- 6. 如何使用let綁定方式在SML中定義常量?
- 7. C#在LINQ中定義LET
- 8. 爲什麼when-let和if-let默認支持多個綁定?
- 9. 定義操作的let語句(綁定)
- 10. Letrec和折返延續
- 11. 如果有的話,Scheme中的letrec定義有什麼錯誤?
- 12. 什麼是internal :: state :: Entry和它在mesos中定義的位置
- 13. Json和Internal db
- 14. 最常見的實現預定義類的方法。
- 15. 方案:爲什麼評估在letrec中定義的遞歸函數失敗?
- 16. UML的常見用法
- 17. 使用常見的方法
- 18. 命名空間定義和異常
- 19. 常見的lisp,未定義的交集函數行爲?
- 20. 「let」綁定不適用於後續的「let」綁定?
- 21. let在Haskell中的用法
- 22. 強制常見方法名稱
- 23. 定義常見招搖註釋
- 24. 跨wsdls定義常見郵件
- 25. 常見做法?
- 26. Coq關於隱含參數的不一致行爲Let定義
- 27. XSLT - 使用常見的元素名稱
- 28. 以實用的方式定義常見外觀的模板
- 29. 未定義的引用C++,不常見的情況
- 30. .Net Control.Tag - 常見和不常見的用途