160

はい、これらのもの:

{-#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))

はい、私はそれらが ( HHOS ) 冗談であることを知っています。単純なハック値の実際の例を探していますが、最後に、「これは XYZ を表現する慣用的な方法です」と言って wiki に追加します。解決策が見つからない場合は、報奨金出します。彼らが何について話しているのか完全にわからない場合は、Edwardが redditに短い説明を投稿しました。

適格な回答は次の条件を満たす必要があります。

  1. 少なくともリモートで理論的に計算上有用なことを行います。つまり、 に還元される答えidはアウトです。

  2. スキームのすべての機能を使用し、id、const、または同等のものを渡さないでください。

  3. 単純なバニラ フォールドなどで同じように表現できるわけではないため、単純にproduct蛇行した方法で実装しないでください。

ボーナス ポイントは次の場合に付与されます。

  • よく知られた問題またはアルゴリズム

  • それぞれ得られる異常な方法で解決され、表現された

  • 明快さおよび/またはパフォーマンス

  • および/またはハック値

  • および/またはlulz、おおよそその順序で、

  • 上位の回答 (yay 民主主義)

以下のエドワードの回答にも注意してください。どの ZHPM 実装を使用するかは、あなたの選択です。

4

2 に答える 2

55

Sharon Curtis と Shin-Cheng Mu は、ザイゴモーフィズムを使用して最大密度のセグメント (最大セグメント合計の一般化) を見つける Functional Pearl を持っています。Zygomorphisms は、慣れればスライディング ウィンドウの問題に適しているように見えます。

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

固定小数点 Mu ファンクターの使用を避けた著者に、追加の功績を認めてあげたいと思います。

于 2011-02-20T20:11:05.490 に答える
39

これらの署名が変更されていることに注意してください。これは一般的ではなかったためです。(冗談として) recursion-schemesパッケージに含めました。

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

実装も簡素化されました。

zygoHistoPrepro f = gprepro (distZygoT f distHisto)

そして、新しい実装から、代わりにを使用して、ストリームを持っているという制約を緩和することにより、一般化された接合体形態の事前準同型を実装する方法が明らかになるはずです。(Base t)-BranchingdistGHisto

于 2011-02-20T17:35:27.157 に答える