【发布时间】:2018-07-20 04:49:02
【问题描述】:
我在这里有一个可爱的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
在我看来我做不到,但我已经被我的 S.O.过去有好几次伙伴。
【问题讨论】:
-
我不明白。如果您尝试类似的
fixcata f = fix $ \g -> f . fmap g . unFix会发生什么? -
@chi 哦。又败了。我对固定点很差。我可能应该删除这个问题以避免尴尬。
-
当一个人被“击败”时,SO 不是一场游戏 :) 在事先不知道答案的情况下提出问题并没有错——事实上这就是提问的全部意义!
标签: haskell recursion optimization fixpoint-combinators catamorphism