Esses termos foram mencionados no meu curso universitário. A pesquisa rápida no Google apontou alguns documentos da universidade, mas estou procurando uma explicação simples.
functional-programming
haskell
Gaurav Abbi
fonte
fonte
C
é um objeto em alguma categoria (digamosCC
),F
é um functor doCC -> CC
que mapeia deCC
volta para si mesmo. AgoraF CC -> CC
é apenas uma seta normal na categoriaCC
. Assim, umaF
álgebra é um objetoC : CC
e uma setaF C -> C
naCC
Respostas:
Mesmo que duas respostas já tenham sido fornecidas, não acho que a "divisão da banana" tenha sido explicada aqui ainda.
É de fato definido em "Programação Funcional com Bananas, Lentes, Envelopes e Arame Farpado, Erik Meijer Maarten Fokkinga, Ross Paterson, 1991"; esse artigo é difícil de ler (para mim) devido ao uso intenso de Squiggol. No entanto, "Um tutorial sobre a universalidade e expressividade da dobra, Graham Hutton, 1999" contém uma definição que é mais fácil de analisar:
fonte
Portanto, na verdade, isso é referenciado por um artigo de Meijer e alguns outros chamados " Programação Funcional com Bananas, Lentes, Envelopes e Arame Farpado ", a idéia básica é que podemos usar qualquer tipo de dados recursivos, como, por exemplo,
e podemos fatorar a recursão em uma variável de tipo
a razão pela qual eu anexei isso
F
é porque agora é um functor! Também nos permite imitar listas, mas com um toque: para criar listas, precisamos aninhar o tipo de listaPara recuperar nossa lista original, precisamos continuar aninhando isso infinitamente . Isso nos dará um tipo
ListFF
em quePara isso, defina um "tipo de ponto fixo"
Como exercício, você deve verificar se isso satisfaz a equação acima. Agora podemos finalmente definir o que são bananas (catamorfismos)!
ListAlg
s são o tipo de "lista de álgebras" e podemos definir uma função específicaAlém disso
Parece familiar?
cata
é exatamente o mesmo que dobras à direita!O que é realmente interessante é que podemos fazer isso mais do que apenas listas, qualquer tipo definido com esse "ponto fixo de um functor" possui um
cata
e, para acomodá-los, basta relaxar a assinatura de tipoNa verdade, isso é inspirado em uma parte da teoria das categorias sobre a qual escrevi , mas essa é a carne do lado Haskell.
fonte
Embora jozefg tenha fornecido uma resposta, não tenho certeza se ela respondeu à pergunta. A "lei de fusão" é explicada no seguinte artigo:
Basicamente, diz que, sob algumas condições, você pode combinar ("fundir") a composição de uma função e dobrar em uma única dobra, basicamente
As condições para essa igualdade são
A "banana split" ou "lei da banana split" é do artigo
Infelizmente, o artigo é muito difícil de decifrar, pois usa o formalismo de Bird-Meertens, de modo que não pude entender o que aconteceu. Tanto quanto eu entendi a "lei da divisão das bananas", diz que se você tiver duas dobras operando no mesmo argumento, elas poderão ser mescladas em uma única dobra.
fonte