zygohistomorphic prepromorphismsの実際のアプリケーション


156

はい、これらは

{-#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に追加します。あなたが解決策を思い付かなかった場合、私これに報奨金出します。あなたが彼らが何であるかについて完全に迷っているなら、エドワードはredditに短い説明を投稿しました。

適格な回答は:

  1. 少なくともリモートで、理論的には計算上有用なことを行う。つまり、減少する答えidは出て行きます。

  2. スキームのすべての機能を使用し、id、const、または同等のものを渡しません。

  3. 単純なバニラ折りなどで表現することはできませんので、単にproduct曲がりくねった方法で実装しないでください。

ボーナスポイントは以下に与えられます:

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

  • 獲得する異常な方法でそれぞれ解決、表現

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

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

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

  • 上位の回答(そう、民主主義)

以下のエドワードの回答にも注意してください。使用するZHPMの実装は任意です。


5
IOスタックに含まれていれば、SimonPJの有名なlaunchMissles機能を使用できたはずです。しかし、私はそのすべての超純粋な抽象的なナンセンスのすべての要点は、そのようなことの可能性を回避することであると思います。
Yitz

6
まあ、a何でもかまいませんので、入力データの評価に基づいてミサイルを戦略的に発射するIO値を自由に構築してください。
barsoap

49
あなたが何について話しているのか私にはわからなかったので、私はこの質問をクリックしました。+1良きサー、+ 1
ドリュー

7
すべてのコンポーネントの使用を検討している人は、zygohistomorphic prepromorphism再帰が展開する対象を手動で記述し、これらのパターンのすべてを必要とする問題を探すのに適しています。命令型ループは、任意に複雑な追跡を行う傾向があるため、確認するのに適しています。
エドワードZ.ヤン

3
より重要-それはブレンドされますか?(大変申し訳ありませんが、抵抗できません
でした

回答:


52

Sharon CurtisとShin-Cheng Muは、接合型を使用して最大密度のセグメントを見つける機能的な真珠を持っています(最大セグメントの合計の一般化)。接合型は、慣れればスライディングウィンドウの問題に適しているようです。

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

固定小数点のMu関数の使用を避けたので、著者に追加のクレジットを推薦します。


スキミングから、DRSPを追跡する際にヒストがどのように使用されるかはわかると思います(同じように、シンプルfoldrが既に構築されたリストを見ることができるのと同じです)が、プリプロはすぐにはわかりません。詳しく説明してもらえますか?(そして、可能であれば、wikiページに追加できる短い+甘いコードを提供しますか?)
barsoap

3
コードは、ランディングページのエラッタの下のリンクから入手できます。接合形態の実際の定義は、ファイルMain.hsにあります。これは、論文の定義とは異なります。それは「単なる」ザイゴモーフィズムであり、「ザイゴヒストモルフィックな前プロモーフィズム」ではありません。動的プログラミングにヒストモーフィズム
viinistu

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

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

zygoHistoPrepro f = gprepro (distZygoT f distHisto)

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


2
ああ、そうですね。
ベンロンゴ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.