Katamorfisme

Vi giver en række eksempler, og derefter en mere global tilgang til katamorfier, i Haskell programmeringssprog.

IterationEdit

iterationstrinsforskrifter fører til naturlige tal som indledende objekt.

overvej functor fmaybe kortlægning af en datatype b til en datatype fmaybe b, som indeholder en kopi af hvert udtryk fra b samt en yderligere term Nothing (i Haskell er dette hvad Maybe gør). Dette kan kodes ved hjælp af et udtryk og en funktion. Så lad en forekomst af en StepAlgebra også omfatte en funktion fra fmaybe b til b, som kortlægger Nothing til en fast periode nil af b, og hvor handlingerne på de kopierede vilkår vil blive kaldt next.

list foldEdit

for en fast typea, overvej functor-kortlægningstyperneb til produkttypen for disse to typer. Vi tilføjer desuden også et udtryk Nil til denne resulterende type. En f-algebra skal nu kortlægge Niltil et specielt udtryk nilaf beller” flette”et par (ethvert andet udtryk af den konstruerede type) til et udtryk b. Denne sammensmeltning af et par kan kodes som en funktion af typen a -> b -> b.

træ foldEdit

for en fast type a, overvej functor-kortlægningstyperne b til en type, der indeholder en kopi af hvert udtryk a samt alle par af b‘s (vilkår for Produkttype af to forekomster af typen b). En algebra består af en funktion til b, som enten virker på en asigt eller to b vilkår. Denne sammensmeltning af et par kan kodes som to funktioner af typen a -> b resp. b -> b -> b.

General caseEdit

dybere kategori teoretiske studier af indledende algebraer afslører, at F-algebra opnået ved at anvende functor til sin egen indledende algebra er isomorf til den.

stærke typesystemer gør det muligt for os abstrakt at specificere den oprindelige algebra for en functorf som dets faste punkt A = f A. De rekursivt definerede katamorfier kan nu kodes i en enkelt linje, hvor sagsanalysen (som i de forskellige eksempler ovenfor) er indkapslet af fmap. Da domænet for sidstnævnte er objekter i billedet af f, springer evalueringen af katamorfismerne frem og tilbage mellemaogf a.

nu igen det første eksempel, men nu via passerer måske functor at rette. Gentagen anvendelse af måske-funktionen genererer en kæde af typer, som dog kan forenes af isomorfismen fra fastpunktssætningen. Vi introducerer udtrykket zero, der stammer fra Maybes ‘ s Nothing og identificerer en efterfølgerfunktion med gentagen anvendelse af Just. På denne måde opstår de naturlige tal.

og nu igen træeksemplet. Til dette skal vi angive datatypen træbeholder, så vi kan konfigurere fmap (vi behøvede ikke at gøre det for Maybe functor, da det er en del af standardforspillet).

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

følgende vil evaluere til 4:cata treeDepth $ meet (end "X") (meet (meet (end "YXX") (end "YXY")) (end "YY"))

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.