颧弓形态前同态的真实应用

bar*_*oap 155 haskell functional-programming category-theory

是的,这些:

{-#LANGUAGE TypeOperators, RankNTypes #-}
import Control.Morphism.Zygo
import Control.Morphism.Prepro
import Control.Morphism.Histo
import Control.Functor.Algebra
import Control.Functor.Extras
import Control.Functor.Fix
import Control.Comonad.Cofree

zygohistomorphic_prepromorphism 
  :: Functor f
  => Algebra f b
  -> GAlgebra f (ZygoT (Cofree f) b) a 
  -> (f :~> f) 
  -> FixF f 
  -> a
zygohistomorphic_prepromorphism f 
  = g_prepro (distZygoT (liftAlgebra f) (distHisto id))
Run Code Online (Sandbox Code Playgroud)

是的,我知道他们是(HHOS)的笑话.我正在寻找一个简单的黑客价值的真实世界的例子,最后,但并非最不重要的是,将它添加到维基说"这是表达XYZ的惯用方式".如果你没有提出解决方案,我对此表示赏心悦目.如果你完全迷失了他们的意思,爱德华在reddit上发布了一个简短的解释.

符合条件的答案必须:

  1. 至少做一些远程的,理论上计算上有用的东西.也就是说,减少的答案id已经消失.

  2. 使用该方案的所有功能,不传入id,const或等效.

  3. 不能用简单的香草褶皱等表达,所以不要仅仅product以蜿蜒的方式实施.

奖励积分将给予:

  • 众所周知的问题或算法

  • 解决,分别表达,以一种不寻常的方式获得

  • 清晰度和/或性能

  • 和/或黑客价值

  • 和/或lulz,大致按此顺序,以及

  • 高级答案(耶和华民主)

请注意爱德华的答案如下.您使用的ZHPM实施是您的选择.

ste*_*ley 52

Sharon Curtis和Shin-Cheng Mu使用zygomorphisms来寻找最大密集区段(最大区段总和的概括).一旦你习惯了它们,Zygomorphisms似乎非常适合滑动窗口问题.

http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/

由于他们避免使用定点Mu函子,我会提名作者以获得额外的功劳.

  • 该代码可从着陆页上的勘误表下方的链接获得.对象的实际定义在Main.hs文件中 - 它与文中的定义不同.这是"只是"一个对称性而不是"zygohistomorphic prepromorphisms" - 一个对称性是我在现实世界中看到的最接近的东西.虽然Jevgeni Kabanov使用histomorphisms进行动态规划,但有一些幻灯片:http://www.cs.ioc.ee/~tarmo/tday-viinistu/kabanov-slides.pdf (3认同)

Edw*_*ETT 39

注意,这些的签名已经改变,因为它不够通用,我把它(作为一个笑话)包含在我的递归方案包中.

zygoHistoPrepro 
  :: (Unfoldable t, Foldable t) 
  => (Base t b -> b) 
  -> (forall c. Base t c -> Base t c) 
  -> (Base t (EnvT b (Stream (Base t)) a) -> a) 
  -> t
  -> a
Run Code Online (Sandbox Code Playgroud)

实施也得到了简化.

zygoHistoPrepro f = gprepro (distZygoT f distHisto)
Run Code Online (Sandbox Code Playgroud)

从新的实现中,应该明白如何通过使用替代来放宽对流的约束来实现广义的颧骨形态预先形态.(Base t)-BranchingdistGHisto

  • 啊,是的,很明显。 (4认同)