Programación funcional¶
- Inmutabilidad: Todo es un valor
- Programación orientada a valores: Toda expresion devuelve un valor
- Funciones de alto orden: Funciones que reciben funciones o bien retornan funciones
- Abstracción funcional. Representar datos con clases y aplicar operaciones en notación infija
- Funciones: map, filter y reduce
- Reconocimiento de patrones.Integra la condición con la extracción de la información.
- Expresiones for.
- Evaluación perezosa
Resumen de la Clase - Evaluación Perezosa¶
Conceptos Clave¶
| Concepto | Descripción | Ejemplo en Código |
|---|---|---|
| Evaluación Perezosa | Cálculo de valores solo cuando se necesitan | LazyList.cons(min, generador(min+1,max)) |
| LazyList | Estructura de datos que evalúa elementos bajo demanda | generador(1,1000) retorna LazyList(<not computed>) |
| Generadores | Funciones que producen secuencias infinitas o grandes | for { x <- generador(1,1000) ... } |
| Filtrado Perezoso | Aplicación de condiciones sin evaluar toda la secuencia | if x*x + y*y == z*z en comprensiones de lista |
| Memorización | Los elementos calculados se almacenan para acceso futuro | println(g(10)) luego println(g) muestra elementos computados |
Ventajas de la Programación Funcional¶
| Ventaja | Explicación | Ejemplo en la Clase |
|---|---|---|
| Inmutabilidad | Los datos no se modifican, se transforman | LazyList mantiene estado consistente |
| Transparencia Referencial | Misma entrada = misma salida siempre | generador(1,1000) siempre produce misma secuencia |
| Composición | Funciones pequeñas se combinan para crear comportamientos complejos | generador + filtros = resolverProblema |
| Eficiencia en Memoria | Solo se calcula lo necesario | No genera 1 billón de tripletas, solo las requeridas |
| Manejo de Secuencias Infinitas | Posibilidad de trabajar con datos ilimitados | Podría extenderse a rangos infinitos |
| Expresividad | Código conciso que describe qué hacer, no cómo | Comprensiones de lista expresan lógica claramente |
| Paralelización | Funciones puras facilitan ejecución concurrente | Cada evaluación de tripleta es independiente |
Aplicación Práctica¶
- Problema de tripletas pitagóricas: Encontrar (x,y,z) donde \(x^2 + y^2 = z^2\)
- Problema de tripletas con condiciones: (i,j,k) con i par, i múltiplo de j, k primo
- Solución: Combinación de generadores perezosos con filtros funcionales