簡體   English   中英

如何將Haskell中的lambda項的求值強制為強范式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM