Catamorphism

haskellプログラミング言語では、一連の例を示し、次にcatamorphismsに対するよりグローバルなアプローチを示します。

IterationEdit

反復ステップ処方は、初期オブジェクトとして自然数につながります。

ファンクタを考えてみましょうfmaybebfmaybe bbb(haskellでは、これはMaybeが行うことです)。 これは、1つの項と1つの関数を使用して符号化できます。 したがって、StepAlgebraのインスタンスには、fmaybe bbNothingnilbbbbbbnextと呼ばれます。

List foldededit

固定型abNilを追加します。 F代数は、Nilnilbba -> b -> bの関数としてエンコードできます。

Tree foldededit

固定型aの場合、functorマッピング型babbbの(タイプbbaba -> brespの二つの関数としてエンコードすることができます。 b -> b -> b。初期代数のより深い圏理論的研究は、関手をそれ自身の初期代数に適用することから得られたF-代数がそれに同型であることを明らかにする。

General caseEdit

強い型システムにより、ファンクタfの初期代数を固定小数点a=f aとして抽象的に指定することができます。 再帰的に定義されたカタモルフィズムは、(上記の異なる例のように)ケース分析がfmapによってカプセル化される単一行でコード化することができます。 後者のドメインはfaf aの間で前後にジャンプします。

ここでも最初の例ですが、Maybe functorをFixに渡すことで修正できます。 Maybe関手の繰り返し適用は型の連鎖を生成するが、これは固定小数点定理からの同型写像によって統一することができる。 私たちは、MaybesのNothingzeroJustを繰り返し適用して後継関数を特定します。 このようにして自然数が発生します。

そして今、再びツリーの例。 このためには、ツリーコンテナのデータ型を指定して、fmapMaybeファンクタでは、標準のpreludeの一部であるため、これを行う必要はありませんでした)。/div>

data Tcon a b = TconL a | TconR b binstance Functor (Tcon a) where fmap f (TconL x) = TconL x fmap f (TconR y z) = TconR (f y) (f z)
type Tree a = Fix (Tcon a) -- the initial algebraend :: a -> Tree aend = Iso . TconLmeet :: Tree a -> Tree a -> Tree ameet l r = Iso $ TconR l r
treeDepth :: Algebra (Tcon a) Integer -- again, the treeDepth f-algebra exampletreeDepth (TconL x) = 1treeDepth (TconR y z) = 1 + max y z

以下は4に評価されます。cata treeDepth $ meet (end "X") (meet (meet (end "YXX") (end "YXY")) (end "YY"))

コメントを残す

メールアドレスが公開されることはありません。