2.5.3 FPL/Programación Funcional
Temas:
Core
- Expresiones lambda y evaluación:
- Enlace (binding) de variables y reglas de ámbito (scope).
- Paso de parámetros.
- Expresiones lambda anidadas y orden de reducción.
- Programación libre de efectos secundarios:
- Las llamadas a funciones no tienen efectos secundarios, facilitando el razonamiento composicional.
- Variables inmutables y copia de datos vs reducción.
- Uso de recursión vs bucles vs tuberías (map/reduce).
- Procesamiento de datos estructurados (por ejemplo, árboles) mediante funciones con casos para cada variante de datos:
- Funciones definidas sobre datos compuestos en términos de funciones aplicadas a las piezas constituyentes.
- Estructuras de datos persistentes.
- Usar funciones de orden superior (tomar, devolver y almacenar funciones).
- Metaprogramación y reflexión.
- Clausuras (closures) de funciones (funciones que usan variables en el entorno léxico circundante):
- Significado y definición básica: crear clausuras en tiempo de ejecución capturando el entorno.
- Idiomas canónicos: devoluciones de llamada (callbacks), argumentos para iteradores, código reutilizable mediante argumentos de funciones.
- Usar una clausura para encapsular datos en su entorno.
- Evaluación diferida (lazy) vs ansiosa (eager).
Non Core
- Máquina de reducción de grafos (graph reduction) y llamada por necesidad (call-by-need).
- Implementar evaluación diferida.
- Integración con el paradigma de programación lógica usando conceptos como lógica ecuacional, estrechamiento (narrowing), residuación (residuation) y unificación semántica.
- Integración con otros paradigmas de programación como imperativo y orientado a objetos.
Aprendizaje esperado (Learning Outcomes):
Core:
- Desarrollar algoritmos básicos que eviten asignar a estados mutables o considerar igualdad referencial [Crear]
- Desarrollar funciones útiles que tomen y devuelvan otras funciones [Crear]
- Explicar un ejemplo simple de una expresión lambda implementada usando una máquina virtual, como una máquina SECD, mostrando el almacenamiento y recuperación del entorno [Explicar]
- Interpretar correctamente las variables y el ámbito léxico en un programa que usa clausuras de funciones [Interpretar]
- Usar mecanismos de encapsulación funcional como clausuras e interfaces modulares [Usar]
- Comparar y contrastar ejecución con estado (stateful) vs sin estado (stateless) [Comparar]
- Definir y usar iteradores y otras operaciones en agregados, incluyendo operaciones que toman funciones como argumentos, en múltiples lenguajes de programación, seleccionando los idiomas más naturales para cada lenguaje [Definir]
NonCore:
- Ilustrar la reducción de grafos usando una expresión
con una subexpresión compartida [Aplicar]
- Ilustrar la ejecución de una expresión
anidada simple usando una máquina abstracta, como una máquina ABC [Aplicar]
- Ilustrar estrechamiento (narrowing), residuación y unificación semántica usando ejemplos ilustrativos simples [Aplicar]
- Ilustrar las construcciones de concurrencia usando ejemplos de programación simples de conceptos conocidos, como un búfer siendo leído y escrito concurrentemente o secuencialmente [Aplicar]
Generado por Ernesto Cuadros-Vargas , Sociedad Peruana de Computación-Peru, basado en el modelo de la Computing Curricula de IEEE-CS/ACM