Catamorphism

adunk egy sor példát, majd egy globálisabb megközelítést katamorfizmusok, a Haskell programozási nyelv.

IterationEdit

az iterációs lépés előírásai természetes számokhoz vezetnek, mint kezdeti objektumhoz.

fontolja meg a functor fmaybe egy adattípus leképezése b egy adattípushoz fmaybe b, amely tartalmazza az egyes kifejezések másolatát a b valamint egy további kifejezést Nothing (haskellben ez az, amit a Maybe csinál). Ez kódolható egy kifejezés és egy függvény használatával. Tehát egy StepAlgebra példánya tartalmazzon egy függvényt is fmaybe b to b, amely leképezi Nothing egy rögzített kifejezésre nil of b, ahol a másolt kifejezések műveletei nextlesznek.

List foldEdit

rögzített típus esetén avegye figyelembe a functor leképezési típusokat b e két típus terméktípusához. Ezenkívül hozzáadunk egy kifejezést is Nil ehhez a kapott típushoz. Az f-algebra most leképezi Nil valamilyen speciális kifejezésre nil of b vagy “egyesítsen” egy párot (a felépített típus bármely más kifejezését) a bkifejezésbe. Egy pár ilyen összevonása kódolható a a -> b -> btípus függvényeként.

fa foldEdit

rögzített típus esetén a, vegye figyelembe a functor leképezési típusokat b olyan típusra, amely tartalmazza a a minden egyes kifejezésének másolatát, valamint a b‘s (a btípusú két példány terméktípusának feltételei). Az algebra a b függvényből áll, amely vagy egy a kifejezésre vagy két b kifejezésre hat. Egy pár egyesítése két függvényként kódolható a -> b ill. b -> b -> b.

General caseEdit

a kezdeti algebrák mélyebb kategóriájú elméleti tanulmányai azt mutatják, hogy a functor saját kezdeti algebrájára történő alkalmazásából kapott F-algebra izomorf.

az erős típusú rendszerek lehetővé teszik számunkra, hogy elvontan meghatározzuk a functor kezdeti algebrájátf rögzített pontként a = f a. A rekurzívan definiált katamorfizmusok most már egyetlen sorban kódolhatók, ahol az esetelemzést (mint a fenti különböző példákban) az fmap kapszulázza. Mivel az utóbbiak tartománya a f képében lévő objektumok, a katamorfizmusok értékelése oda-vissza ugrik a a és a f aközött.

most ismét az első példa, de most keresztül halad a talán functor kijavítani. A talán functor ismételt alkalmazása típusláncot generál, amelyet azonban a fixpont tétel izomorfizmusa egyesíthet. Bemutatjuk a zero kifejezést, amely a Maybes Nothing – ből származik, és azonosítunk egy utódfunkciót a Justismételt alkalmazásával. Így keletkeznek a természetes számok.

és most ismét a fa példa. Ehhez meg kell adnunk a fa tároló adattípusát, hogy beállíthassuk a fmap (nem kellett megtennünk a Maybe functor számára, mivel ez a standard prelude része).

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

a következő érték 4-re változik:cata treeDepth $ meet (end "X") (meet (meet (end "YXX") (end "YXY")) (end "YY"))

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.