Evaluación perezosa Estrategias de evaluación Estrategias de evaluación Para los
ejemplos se considera la función mult :: (Int,Int) -> Int mult (x,y) = x*y Evaluación
mediante paso de parámetros por valor (o por más internos): mult (1+2,2+3) = mult
(3,5) [por def. de +] = 3*5 [por def. de mult] = 15 [por def. de *] Evaluación mediante
paso de parámetros por nombre (o por más externos): mult (1+2,2+3) = (1+2)*(3+5)
[por def. de mult] = 3*5 [por def. de +] 4 / 27
Evaluación perezosa Estrategias de evaluación Evaluación con lambda expresiones
Se considera la función mult' :: Int -> Int -> Int mult' x = y -> x*y Evaluación: mult’
(1+2) (2+3) = mult’ 3 (2+3) [por def. de +] = (λy → 3*y) (2+3) [por def. de mult’] = (λy →
3*y) 5 [por def. de +] = 3*5 [por def. de +] = 15 [por def. de *] 5 / 27
Funciones
Orden Aplicativo: o ansioso, aunque no necesite se debe evaluar
todos los argumentos.
Orden Normal
1.- Resuelve la función aunque no conozca los argumentos
2.- No calcula más de lo necesario
3.- La expresión no se evalúa hasta que se requiera
Ventajas
El incremento en el rendimiento al evitar cálculos innecesarios, y en
tratar condiciones de error al evaluar expresiones compuestas.
La capacidad de construir estructuras de datos potencialmente
infinitas.
La capacidad de definir estructuras de control como abstracciones, en
lugar de operaciones primitivas.
Desventajas
Puede llevar a la reducción de la huella de memoria, ya que los valores se crean
cuando es necesario. Con la evaluación perezosa, es difícil convinarse con rasgos
imperativos como la excepcion que se maneja y entrada/salida, por que el
pedido de operaciones se hace indeterminado
Técnicas de la programación perezosa
De afuera hacia adentro
Evaluación que no termina
De adentro hacia afuera
CALL BY NAME
Concepto
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.