簡體   English   中英

Haskell - Eta 減少和 Eta 擴展

[英]Haskell - Eta reduction and Eta expansion

一直在研究函數式程序優化,一直在挖掘GHC源碼。 我(大部分)理解 eta 縮減和 eta 擴展是什么。 Eta 減少僅刪除多余的 lambda:

\x -> abs x
=>
abs

Eta 展開與 eta 減少相反,並執行以下操作(如果我不正確,請糾正我):

abs
=>
\x -> abs x
-----------------------------------------------
foo = abs
=>
foo x = abs x
-----------------------------------------------
foo = bar 100
bar x y = x + y
=>
foo y = bar 10 y
bar x y = x + y
-----------------------------------------------
etc...

我不明白的是它們如何不妨礙彼此並將編譯器發送到無限循環中。 例如,首先對一個值進行 eta 擴展,然后將其進行 eta 縮減,依此類推。 那么,這兩種優化如何不妨礙對方呢?

我想我找到了答案。 我從 GHC 的一位貢獻者那里找到了一篇論文(不記得它叫什么了),其中提到 GHC 不做 eta 減少。 相反,它進行 eta 擴展和 beta 減少(IIRC); Beta 減少完成了大部分工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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