sábado, 29 de septiembre de 2012

Lazy evaluation, la ventaja de los perezosos

Lazy evaluation o evaluación perezosa permite que un bloque de código sea evaluado luego, esto nos permite realizar código más performante en ciertas situaciones. Vamos con un ejemplo, supongamos que tengo la función multiplicación

mult(a, b) = a * a

Si llamara a esta función de la forma mult(8, 5+2) se ejecutaría así:

mult(8, 5+2)
mult(8,7)
8*8
64

Pero si ejecutamos el código de forma perezosa
mult(8, 5+2)
8 * 8
64

En este caso la ejecución perezosa fue más eficiente que la normal.

Para poner otro ejemplo si tengo la función loop

loop(x) = loop(x)

Esta función nunca termina, veamos que pasa si ejecutamos mult(2, loop(2))

mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
... hasta el infinito y más allá...

Pero si ejecutamos de forma perezosa

mult(2, loop(2))
2 * 2
4

Termina y nos da el resultado.

La evaluación perezosa viene del paradigma funcional, es una característica de Haskell y también de Scala. Dándole gran potencia al lenguaje.  

Dejo link:
http://en.wikipedia.org/wiki/Lazy_evaluation