簡體   English   中英

是否可以免費寫下共享修復點?

[英]Is it possible to write down a sharing fix point-free?

編輯:這篇文章中的fix代表通常寫在 Haskell 中的定點組合,而不僅僅是Data.Function.fix

眾所周知, fix可能是非共享的,因為 GHC 並不總是消除常見的子表達式:

長話短說:“如果您關心 CSE,請親自動手。”

使用S -combinator 可以很容易地無點寫下fix

fix = ($) <*> fix

如果我們返回積分,我們將得到眾所周知的非共享實現:

fix f = ($) <*> fix $ f = ($) f (fix f) = f (fix f)

我相信,在這種情況下,GHC 無法完成 CSE,因為fix f取決於f在其第一個參數中的懶惰。 事實上,正如Daniel Wagner所建議的,請看下面的代碼片段:

let ones = fix (1:) in (ones !! 10000, ones !! 0)

使用fix f = let x = fx in x它使用了 ~54,5 kB,而使用fix = ($) <*> fix - ~615 kB。

是否可以以某種方式編寫共享無點fix

不, let是 GHC 分享事物的提示, let需要一個點。

暫無
暫無

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

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