jueves, 24 de marzo de 2016

¿Que es la Evaluación perezosa?



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

No hay comentarios.:

Publicar un comentario