我想知道是否可以關閉Haskell中的懶惰評估;
我想強制lambda項評估爲強正常形式。如何強制haskell中的lambda項評估爲強正常形式
例如:我想\x -> (\y -> y) x 1
提前降低到\x -> x 1
感謝。
我想知道是否可以關閉Haskell中的懶惰評估;
我想強制lambda項評估爲強正常形式。如何強制haskell中的lambda項評估爲強正常形式
例如:我想\x -> (\y -> y) x 1
提前降低到\x -> x 1
感謝。
你不能這樣做。原因是Haskell不應該執行lambda期限減少。 Haskell 將程序(lambda項)評估爲值。如何做到這一點的一個可能性是真正執行lambda期限減少,但這將是非常低效的。因此,Haskell編譯器使用許多複雜的技術,例如圖形縮減。因此,在評估過程中,您無法觀察到(\x -> x) y
與y
之間的差異 - 沒有實際的lambda術語需要遵守。
注意,GHC有NFData
類型的類,它允許條件評估使用rnf
他們的正常形式 - [R -educe到ň -ormal ˚F -orm(但僅限於產品或副產品,它仍然沒有按」 t評估lambdas下的術語,正如@JakeMcArthur指出的那樣)。但是,這不會讓您訪問以lambda表達式表示的正常形式。它只告訴Haskell在計算過程中執行此評估。
值得注意的是'NFData'在lambdas下也不會減少。 –
@JakeMcArthur好點,我會更新答案。 –
這個問題可能由超級編譯器解決。目前,沒有什麼與當前的ghc和當前的軟件包配合得很好。
存在一個較舊的實施supercompiler的: http://community.haskell.org/~ndm/supero/
我你有興趣在一些較新的考慮因素,這可能會感興趣: http://pure.ltu.se/portal/files/2231262/nwpt08-scp.pdf
不過,我也不能提出一個妥善的解決辦法。
請參閱:http://stackoverflow.com/questions/15627849/turn-off-lazy-evaluation-in-haskell –
我只想指出,第二句話使這一個更具體的問題比這被認爲是重複的。 – kosmikus
這不是推薦問題的重複內容。這是關於lambda下的評估。 – augustss