Programación funcional: evaluación perezosa

La evaluación perezosa es una estrategia de evaluación que retiene la evaluación de una expresión hasta que se necesita su valor. Evita evaluaciones repetidas.Haskell es un buen ejemplo de un lenguaje de programación tan funcional cuyos fundamentos se basan en Lazy Evaluation.

La evaluación diferida se utiliza en las funciones de mapas de Unix para mejorar su rendimiento cargando solo las páginas requeridas del disco. No se asignará memoria para las páginas restantes.

Evaluación perezosa: ventajas

  • Permite que el tiempo de ejecución del lenguaje descarte subexpresiones que no están directamente vinculadas al resultado final de la expresión.

  • Reduce la complejidad temporal de un algoritmo descartando los cálculos y condicionales temporales.

  • Permite al programador acceder a componentes de estructuras de datos desordenados después de inicializarlos, siempre que estén libres de dependencias circulares.

  • Es más adecuado para cargar datos a los que se accederá con poca frecuencia.

Evaluación perezosa - Inconvenientes

  • Obliga al tiempo de ejecución del lenguaje a mantener la evaluación de subexpresiones hasta que se requiera en el resultado final creando thunks (objetos retrasados).

  • A veces aumenta la complejidad espacial de un algoritmo.

  • Es muy difícil encontrar su desempeño porque contiene thunks de expresiones antes de su ejecución.

Evaluación perezosa usando Python

los rangeEl método en Python sigue el concepto de Evaluación diferida. Ahorra tiempo de ejecución para rangos más grandes y nunca requerimos todos los valores a la vez, por lo que también ahorra consumo de memoria. Eche un vistazo al siguiente ejemplo.

r = range(10) 
print(r) 
range(0, 10) 
print(r[3])

Producirá la siguiente salida:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
3