¿Cuáles son los antecedentes necesarios para entender correctamente el documento de Meijer: Programación funcional con plátanos, lentes, sobres y alambre de púas?

No soy un experto, por lo que no puedo hacer comentarios creíbles sobre la motivación de este documento. Sin embargo, en mi interpretación, el artículo de Meijer es un intento inicial para (y aparentemente exitoso) de establecer un conjunto de mecanismos de recursión “primitivos” en lugar de los usos “torpes e inmanejables” de la recursión general.

La audiencia parece ser la que se siente cómoda con la programación funcional y tiene un poco de apetito por las categorías. Más allá de eso, el documento es en su mayoría autónomo. Sin embargo, es probable que desee hacer varias relecturas para aprovechar al máximo.

En verdadero espíritu PL, se inspira en morfismos categóricos: se nos presentan cuatro tipos de firmas funcionales: catamórficos (pliegues) / plátanos, anamorfos (despliegue) / lentes, hylomorphs (despliegue -> reducir) / sobres, y paramórficos / alambres de púas. Las principales contribuciones de este documento incluyen una introducción al razonamiento sobre la recursividad dentro de estos cuatro morfismos, así como una buena caja de herramientas de propiedades de “almuerzo gratis” sobre estos morfismos que le permite reducir sus algoritmos recursivos generales en estos morfismos (por caminos del razonamiento ecuacional de Meertens sobre los programas).


Aquí hay un resumen de las diferentes partes de este documento:

  1. En la primera parte, se nos presentan técnicas familiares (y otras no tan familiares pero fácilmente asimilables) en las listas . Dado un tipo A, se nos presenta por primera vez a los catamorfos que generaliza el plegamiento. Estas son funciones “descendentes” en el sentido de que reducen los corchetes: fold [math] (\ otimes, \ textbf {1}) :: [A] \ to A [/ math]. En espíritus similares, también se nos presenta a su hermano “ascendente”, el anamorfismo, que se puede considerar como un generador dinámico. Usted le da una semilla inicial y un predicado y desde allí nuestro anamorfo se desarrolla en una lista hermosa. A continuación, para explotar la dualidad entre ana y catamorphisms, tenemos hylomorphs que se pueden considerar como un transformador de listas (primero reduce su lista [matemática [A] [/ math] en una sola semilla en [math] B [/ math], luego lo usa para generar otro objeto similar a una lista usando el despliegue. Finalmente, nos presentan los paramorfismos, que se construyen a partir del principio de inducción estructural del tipo de portador.
  2. Se nos presenta la noción de que los tipos de datos algebraicos pueden razonarse en el marco de los funtores. Por ejemplo, el funtor [matemático] [\ cdot] :: A \ a [A] [/ math] levanta un tipo en su tipo de lista correspondiente. Resulta que estos esquemas de recursión se pueden elevar a funtores arbitrarios, lo que lleva al lector a la sección más importante.
  3. Esta sección está dedicada a la derivación de los mismos esquemas de recursión que vimos anteriormente para listas generalizadas a funtores arbitrarios. A lo largo del paseo, se nos dan varios teoremas libres sobre las propiedades de los diferentes morfismos.