2013-07-10 28 views
1

我想知道是否可以關閉Haskell中的懶惰評估;
我想強制lambda項評估爲強正常形式。如何強制haskell中的lambda項評估爲強正常形式

例如:我想\x -> (\y -> y) x 1提前降低到\x -> x 1

感謝。

+1

請參閱:http://stackoverflow.com/questions/15627849/turn-off-lazy-evaluation-in-haskell –

+0

我只想指出,第二句話使這一個更具體的問題比這被認爲是重複的。 – kosmikus

+1

這不是推薦問題的重複內容。這是關於lambda下的評估。 – augustss

回答

1

你不能這樣做。原因是Haskell不應該執行lambda期限減少。 Haskell 程序(lambda項)評估爲值。如何做到這一點的一個可能性是真正執行lambda期限減少,但這將是非常低效的。因此,Haskell編譯器使用許多複雜的技術,例如圖形縮減。因此,在評估過程中,您無法觀察到(\x -> x) yy之間的差異 - 沒有實際的lambda術語需要遵守。

注意,GHC有NFData類型的類,它允許條件評估使用rnf他們的正常形式 - [R -educe到ň -ormal ˚F -orm(但僅限於產品或副產品,它仍然沒有按」 t評估lambdas下的術語,正如@JakeMcArthur指出的那樣)。但是,這不會讓您訪問以lambda表達式表示的正常形式。它只告訴Haskell在計算過程中執行此評估。

+1

值得注意的是'NFData'在lambdas下也不會減少。 –

+0

@JakeMcArthur好點,我會更新答案。 –