[英]How to force the evaluation of a lambda term in haskell to the strong normal form
我想知道是否有可能在Haskell中關閉惰性評估。
我想將lambda項的評估強制為強范式。
例如:我希望將\\x -> (\\y -> y) x 1
減少為\\x -> x 1
提前致謝。
你做不到 原因是Haskell不應該執行lambda詞條縮減。 Haskell將程序(lambda術語) 評估為值。 這樣做的一種可能性是真正執行lambda項減少,但是效率很低。 因此,Haskell編譯器改用了許多復雜的技術,例如圖形約簡。 因此,在評估過程中您無法觀察到(\\x -> x) y
vs y
差異-沒有實際的lambda項可觀察。
請注意,GHC具有NFData
類型類,該類允許使用rnf
- r-歸納為n-正規f -orm來評估其正常形式的術語(但僅乘積或副產物,它仍然不評估lambdas下的術語,如@JakeMcArthur所指出的那樣)出)。 但是,這不能讓您訪問用lambda術語表示的普通形式。 它僅告訴Haskell在計算過程中執行此評估。
超級編譯器可以解決這個問題。 目前,沒有任何工具可以與當前的ghc和當前的軟件包真正兼容。
有一個較舊的超級編譯器實現: http : //community.haskell.org/~ndm/supero/
如果您對一些較新的注意事項感興趣,則可能會感興趣: http : //pure.ltu.se/portal/files/2231262/nwpt08-scp.pdf
但是,我不能提出適當的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.