La evaluación perezosa o llamada por necesidad es una estrategia de evaluación que retrasa el cálculo de una expresión hasta que su valor sea necesario, y que también evita repetir la evaluación en caso de ser necesaria en posteriores ocasiones. Esta compartición del cálculo puede reducir el tiempo de ejecución de ciertas funciones de forma exponencial, comparado con otros tipos de evaluación.
En los casos en que una expresión puramente funcional (no produzca efectos de borde ni dependa de objetos susceptibles a ser modificados) sea evaluada varias veces, esta pudiera ser evaluada solamente una vez y todas las demás evaluaciones remplazadas por la recuperación del valor ya calculado. Esta optimización se conoce como evaluación perezosa y es de particular importancia en la implementación de lenguajes funcionales con orden de evaluación normal.
Los beneficios de la evaluación perezosa son:
- El incremento en el rendimiento al evitar cálculos innecesarios.
- La capacidad de construir estructuras de datos potencialmente infinitas.
- La evaluación perezosa puede también reducir el consumo de memoria de una aplicación.
Sin embargo, es difícil de combinar con las
operaciones típicas de programación imperativa, como el manejo de excepciones o
las operaciones de entrada/salida, porque el orden de las operaciones puede
quedar indeterminado. Además, la evaluación perezosa puede conducir a
fragmentar la memoria.
Ejemplo
function calcular ( func1(), func2(), func3() ) {
...
}
Un lenguaje sin evaluación perezosa ejecutaría
las funciones func1(), func2() y func3() para obtener los parámetros finales y después
continuaría con el cuerpo de la función. En cambio un lenguaje con evaluación
perezosa empieza con el código de la función sin evaluar previamente las tres
funciones. Las irá evaluando cuando aparezcan en el código y sean realmente
necesarias. De esta forma, si un argumento no se utiliza, nunca será evaluado (
puede ocurrir que alguno de los parámetros esté dentro de un if que no se
cumple )
Autor: Jose Silva
Fecha: 24/03/2016
Bibliografía: https://es.wikipedia.org/wiki/Evaluaci%C3%B3n_perezosa
http://ldc.usb.ve/~suarez/papers/lazyOpt.pdf
http://ldc.usb.ve/~suarez/papers/lazyOpt.pdf
No hay comentarios.:
Publicar un comentario