Está en la página 1de 4

Evaluacin

perezosa
Programacin funcional y lgica
Instituto Tecnolgico Superior de Pnuco
Denisse Itzayana Flores Ros
Ing. Gil Santana Esparza

Introduccin.
En programacin, una estructura de datos es una forma particular de organizar
datos en una computadora para que pueda ser utilizado de manera eficiente. En la
teora de lenguajes de programacin, La evaluacin perezosa (del ingls lazy
evaluation) o llamada por necesidad es una estrategia de evaluacin que retrasa
el clculo de una expresin hasta que su valor sea necesario, y que tambin evita
repetir la evaluacin en caso de ser necesaria en posteriores ocasiones. La
evaluacin perezosa consiste, como siempre que hablamos de pereza, en hacer el
mnimo trabajo posible. Es decir, una expresin no se evala hasta que realmente
se necesita. JavaScript lo utiliza slo puntualmente, pero hay lenguajes, como
Haskell, que lo utilizan siempre. Podemos ver la diferencia con una funcin que
tiene otras funciones como parmetros. Un lenguaje sin evaluacin perezosa
ejecutara las funciones func1(), func2() y func3() para obtener los parmetros
finales y despus continuara con el cuerpo de la funcin. En cambio un lenguaje
con evaluacin perezosa empieza con el cdigo de la funcin sin evaluar
previamente las tres funciones. Las ir evaluando cuando aparezcan en el cdigo
y sean realmente necesarias. De esta forma, si un argumento no se utiliza, nunca
ser evaluado.

Evaluacin perezosa.
La evaluacin perezosa es, segn Hughes, otra cola de pegar que permite
ensamblar juntas piezas de un programa funcional que de otro modo seran
disjuntas. Igual que el orden superior, abstraen aspectos comunes y convierte los
aspectos especficos en parmetros, proporcionando as un modo de ensamblar
entre s piezas independientes, la evaluacin perezosa permite separar el aspecto
de la generacin de los datos del aspecto de su consumo, permitiendo que una
funcin distinta se ocupe de cada uno de ellos.
Un smil podra aclarar qu se entiende por evaluacin perezosa: una fbrica
produce muebles de cocina y una tienda dotada de un pequeo almacn los
vende. Con el fin de minimizar el inmovilizado, la fbrica solo comienza a fabricar
cuando la tienda le comunica una venta segura. A su vez, la fbrica hace su
pedido de madera, metal, vidrio, etc. Solo cuando necesita fabricar algn mueble.
Es decir, todo el proceso est dirigido por la demanda. En ltima instancia, el rbol
que da lugar al mueble empezara a ser cortado a partir del momento que exista
un cliente para dicho mueble. No cabe duda de que esta organizacin tiene
inconvenientes pero tambin tiene evidentes ventajas: ninguna hora de trabajo
sera en vano, no se desperdiciara ni un solo gramo de material y no se
necesitara apenas un almacenaje intermedio. S llamamos CortarMadera, fabricar
y vender a las funciones involucradas, el proceso completo podra definirse
mediante la composicin funcional de las tres.1
muebles= (vender.fabricar.CortarMadera) arboles
Donde arboles representa a la lista infinita de rboles y todas las funciones
producen listas infinitas a

partir de listas infinitas. Supongamos ahora que el

programador escribe la expresin:


Head muebles

1 La aplicacin de la funcin compuesta f.g consiste en aplicar primero la


funcin g, y en aplicar despus el resultado obtenido en la funcin f.

Donde head es la funcin que proporciona la cabeza de una lista. En un lenguaje


y en una fbrica

impacientes, esta llamada desatara un proceso no terminante

en poco tiempo, como los rboles del planeta. La razn es que tratara de evaluar
la lista muebles antes de llamar a head. En una fbrica y lenguajes perezosos, en
cambio, la misma llamada desencadenara la cantidad de proceso estrictamente
necesaria, en cada una de las tres funciones, para producirse un solo mueble.
La evaluacin perezosa es ms complicada de implementar que la impaciente. El
computo es un constante arrancar y parar como el que es fcil imaginar en la
fbrica perezosa de muebles que hemos descrito. Sin embargo, no debemos
preocuparnos demasiado, porque eso es tarea de los compiladores. Lo que
importa es que el programador le simplifica su trabajo, ya que sabiendo que al final
de la cadena hay otra funcin que establece la demanda estrictamente necesaria.
Conclusin:
Entre las ventajas citadas de la evaluacin perezosa estn tambin las siguientes:

Programas que no terminan bajo la evaluacin impaciente, lo hacen bajo la

evaluacin perezosa.
Permite definir funciones no estrictas, es decir, funciones que pueden dar

un resultado definido aunque algunos de sus parmetros estn indefinidos.


Permite definir y utilizar estructuras de datos infinitas. Por ejemplo, se
puede utilizar la lista de todos los nmeros primos, o la de todos los
naturales, o la de todas las potencias de diez, siempre que el cmputo
posterior solo consuma una parte finita de dichas listas.

Bibliografa:
Pea Mar Ricardo, (2008) De Euclides a Java. Historia de los algoritmos y de los
lenguajes de programacin. Editorial AGT.
NOTA: Este reporte ha sido extrado del libro mencionado.