Catamorfismo

damos uma série de exemplos, e então uma abordagem mais global aos catamorfismos, na Linguagem de programação Haskell.IterationEdit Iterationedit

Iteration-step prescriptions lead to natural numbers as initial object.

Considerar o functor fmaybe mapeamento de um tipo de dados b para um tipo de dados fmaybe b, que contém uma cópia de cada termo, a partir de b assim como um termo adicional Nothing (em Haskell, isso é o que Maybe faz). Isto pode ser codificado usando um termo e uma função. Então vamos a uma instância de um StepAlgebra também inclui uma função de fmaybe bb, que mapeia Nothing a um prazo fixo nil de b e onde as ações no copiados termos será chamado de next.

Lista de foldEdit

Para um tipo fixo a, considere o functor tipos de mapeamento b para o tipo de produto desses dois tipos. Nós também adicionamos um termo Nil a este tipo resultante. Um f-álgebra-se agora, map Nil a alguns prazo nil de b ou “mala” um par (de qualquer outro termo construídas tipo) em um prazo de b. Esta junção de um par pode ser codificada como uma função do tipo a -> b -> b.

Árvore foldEdit

Para um tipo fixo a considere o functor tipos de mapeamento b para um tipo que contém uma cópia de cada período de a assim como todos os pares de b‘s (em termos do tipo de produto de duas instâncias do tipo b). Uma álgebra consiste de uma função b, que atua em um a termo ou dois b termos. Esta junção de um par pode ser codificada como duas funções do tipo a -> b resp. b -> b -> b.

geral caseEdit

estudos teóricos de categoria mais profunda das álgebras iniciais revelam que a álgebra F obtida da aplicação do functor à sua própria álgebra inicial é isomórfica para ela.

Strong type systems enable us to abstractly specify the initial algebra of a functor f as its fixed point A = f A. Os catamorfismos definidos recursivamente podem agora ser codificados em uma única linha, onde a análise de caso (como nos diferentes exemplos acima) é encapsulada pelo fmap. Uma vez que o domínio destes últimos são os objetos na imagem de f, a avaliação do catamorphisms salta para trás e para a frente entre a e f a.

Agora novamente o primeiro exemplo, mas agora através da passagem do functor talvez para corrigir. A aplicação repetida do talvez functor gera uma cadeia de tipos, que, no entanto, podem ser unidos pelo isomorfismo a partir do teorema do ponto fixo. Nós introduzimos o termo zero, que surge a partir de Maybes do Nothing e identificar um sucessor função com aplicação repetida de Just. Desta forma os números naturais surgem.

E agora novamente o exemplo da árvore. Para isso, devemos fornecer o container da árvore de tipo de dados para que possamos configurar o fmap (nós não temos de o fazer para o Maybe functor, como é parte do padrão prelúdio).

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

O seguinte irá avaliar como 4: cata treeDepth $ meet (end "X") (meet (meet (end "YXX") (end "YXY")) (end "YY"))

Deixe uma resposta

O seu endereço de email não será publicado.