簡體   English   中英

一個人可以通過Data.Function.fix表達變形嗎?

[英]Can one express catamorphism through Data.Function.fix?

我這里有一個可愛的fixana函數,執行速度比她姐姐ana快5倍。 (我對此有一份criterion報告來支持我)

ana alg = Fix . fmap (ana alg) . alg

fixana alg = fix $ \f -> Fix . fmap f . alg

我可以發表自己的表弟cata以同樣的方式?

cata f = f . fmap (cata f) . unFix

在我看來,我不能,但過去我曾被SO研究員謙虛幾次。

實際上,這與變態無關。

每當函數定義為

f = (... f ...)   -- some expression involving f

一個人可以用fix重寫它

f = fix $ \g -> (... g ...)

在發布的代碼中,我們有一個稍微的變化

f x = (... (f x) ...)

我們可以將上面的f視為遞歸定義。 但是,如果我們以遞歸方式定義fx (而不是f ),則更為簡單。

f x = fix $ \g -> (... g ...)

這應該比普通翻譯更有效

f = fix $ \g x -> (... (g x) ...)

因為我們不需要用相同的參數x反復調用g

暫無
暫無

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

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