Estos términos fueron mencionados en mi curso universitario. Google rápido me señaló algunos documentos de la universidad, pero estoy buscando una explicación simple.
functional-programming
haskell
Gaurav Abbi
fuente
fuente
C
es un objeto en alguna categoría (digamosCC
),F
es un functor deCC -> CC
modo que se asigna deCC
nuevo a sí mismo. AhoraF CC -> CC
es solo una flecha normal en la categoríaCC
. Entonces, unF
álgebra es un objetoC : CC
y una flechaF C -> C
adentroCC
Respuestas:
Aunque ya se han proporcionado 2 respuestas, no creo que la "división del plátano" se haya explicado aquí todavía.
De hecho, se define en "Programación funcional con plátanos, lentes, sobres y alambre de púas, Erik Meijer Maarten Fokkinga, Ross Paterson, 1991"; ese artículo es difícil de leer (para mí) debido al uso intensivo de Squiggol. Sin embargo, "Un tutorial sobre la universalidad y la expresividad de fold, Graham Hutton, 1999" contiene una definición que es más fácil de analizar:
fuente
Así que esto es en realidad una referencia a un artículo de Meijer y algunos otros llamado " Programación funcional con plátanos, lentes, sobres y alambre de púas ", la idea básica es que podemos tomar cualquier tipo de datos recursivos, como por ejemplo
y podemos factorizar la recursividad en una variable de tipo
¡La razón por la que agregué eso
F
es porque ahora es un functor! También nos permite imitar listas, pero con un giro: para construir listas tenemos que anidar el tipo de listaPara recuperar nuestra lista original necesitamos seguir anidando esto infinitamente . Eso nos dará un tipo
ListFF
dondePara hacer esto, defina un "tipo de punto fijo"
Como ejercicio, debe verificar que esto satisfaga nuestra ecuación anterior. ¡Ahora finalmente podemos definir qué son los plátanos (catamorfismos)!
ListAlg
s son el tipo de "lista de álgebras", y podemos definir una función particularAdemás
¿Parecer familiar?
cata
es exactamente lo mismo que los pliegues derechos!Lo que es realmente interesante es que podemos hacer esto en más que solo listas, cualquier tipo que se define con este "punto fijo de un functor" tiene un
cata
y para acomodarlos a todos, solo tenemos que relajar la firma de tipoEsto en realidad está inspirado en una parte de la teoría de la categoría sobre la que escribí , pero esta es la carne del lado de Haskell.
fuente
Aunque jozefg proporcionó una respuesta, no estoy seguro de si respondió la pregunta. La "ley de fusión" se explica en el siguiente documento:
Básicamente dice que, bajo ciertas condiciones, puede combinar ("fusionar") la composición de una función y doblarla en un solo pliegue, así que básicamente
Las condiciones para esta igualdad son
La "ley de división de banana" o "ley de división de banana" es del artículo
Lamentablemente, el artículo es muy difícil de descifrar, ya que utiliza el formalismo Bird-Meertens, por lo que no pude entenderlo. Según tengo entendido, la "ley de división del plátano" dice que si tienes 2 pliegues que operan con el mismo argumento, se pueden fusionar en un solo pliegue.
fuente