繁体   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