6
A
回答
9
我知道,我們通常要求的內容被複制,但沒有簡短的回答你的問題。 http://www.cs.indiana.edu/~dyb/pubs/fixing-letrec.pdf
8
號僅僅因爲一個功能特徵與幕後必要的代碼,不會使功能勢在必行實現。我們的計算機器都是必不可少的;所以在某些時候,所有的功能代碼都必須通過翻譯成命令式的代碼來實現!
最關鍵的事情在這裏明白的是:函數式編程涉及接口,不實施。一段代碼是功能性的,如果是代碼本身是無法觀察任何副作用,即使副作用實際上發生在幕後。也就是說,如果您檢查相同的綁定同一個變量多次的價值,你會得到相同的值,即使這個值,在幕後,是由使用的set!
放在那裏。
在letrec
的情況下,這裏有一個小難題:如果任何在letrec
綁定的評估導致另一個被derefenced結果是不確定的。所以,這個代碼的結果是不確定的:
(letrec ((foo bar)
(bar 7))
(cons foo bar))
的foo
在letrec主體的價值是不確定的。以下的結果,在另一方面,被定義:
(letrec ((foo (lambda() bar))
(bar 7))
(cons (foo) bar))
這是因爲評估lambda
捕獲參考吧,但直到閉合在主體執行的實際值未查找。
相關問題
- 1. 如何在不使用AppDomains的情況下實現.net插件?
- 2. 如何在不使用ListView的情況下實現CursorLoader?
- 3. 如何在不使用指針的情況下實現鏈表?
- 4. 如何在不使用^的情況下實現XOR?
- 5. Microsoft如何在不設置「set」的情況下實現自動化屬性? (c#)
- 6. 如何在不使用ListActivity的情況下實現ListView? (只使用活動)
- 7. 在不使用密碼的情況下在Java中實現RSA
- 8. 如何在不使用已棄用的Notification類的情況下實現startforeground?
- 9. 在不使用註釋的情況下實現SOAPHandler @HandleChain
- 10. 在不使用Modernizr的情況下實現這個結果?
- 11. 如何在不使用DRBD的情況下實現Rabbitmq高可用性?
- 12. 如何在不使用android的情況下實現android應用程序?
- 13. 如何在不使用dragdetect偵聽器的情況下在Slider上實現dragdetection?
- 14. 這個函數如何在不遞歸的情況下實現?
- 15. 如何在不崩潰編譯器的情況下實現MutableCollectionType?
- 16. 如何在不進行輪詢的情況下實現std :: when_any?
- 17. 如何在不擴展的情況下實現listactivity
- 18. 如何在不首先實現的情況下測試接口?
- 19. 如何在不暴露字段的情況下實現equals?
- 20. 如何在不預覽的情況下實現相機程序?
- 21. 如何在不使用TempData的情況下實現相同的結果
- 22. 如何在一種情況下實現具有顯着不同實現的類?
- 23. Android:如何在不使用地圖活動的情況下實現com.google.android.gms.maps.MapView
- 24. 如何在不使用混合列表的情況下實現此功能?
- 25. 如何在不使用STL的情況下實現C++字典數據結構
- 26. Erlang如何在不使用OS線程的情況下實現併發性?
- 27. 如何在不使用表格的情況下實現表格佈局?
- 28. 如何在不使用partialloop視圖助手的情況下實現ZF2視圖?
- 29. 如何在不使用static/global變量的情況下實現singleton?可能?
- 30. Cosmicmind/Material:我如何在不使用AppDelegate.swift的情況下實現PageTabBarController?
The Dybvig et al。紙是一個很好的。幾年前還有一個很好的[關於Lambda終極版的討論](http://lambda-the-ultimate.org/node/2971),講述瞭如何在lambda方面實現letrec。 (說了這麼多,我同意sacundim的評論,「僅僅因爲功能特徵是在幕後執行命令性代碼,並不能使這個功能成爲必需的」)。 –