Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Apuntes Unidad 3 Programacion Logica y Funcional
Apuntes Unidad 3 Programacion Logica y Funcional
Evaluacin Perezosa
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. Esta comparticin del clculo puede reducir el tiempo de ejecucin de
ciertas funciones de forma exponencial, comparado con otros tipos de evaluacin.
Los beneficios de la evaluacin perezosa son:
Unidad III
Tipos
De adentro hacia afuera o call-by-value:
Esta estrategia elige el redex que est "ms adentro" entendiendo por esto al
redex que no contiene otro redex. Si existe ms de un redex que cumple dicha
condicin se elige el que est ms a la izquierda.
De afuera hacia adentro o call-by-name:
Elige el redex que est "ms afuera" entendiendo por esto al redex que no esta
contenido en otro redex. Si existe ms de un redex que cumple dicha condicin se
elige el que est ms a la izquierda.
Evaluaciones que no terminan
Tengan en cuenta la siguiente definicin
inf = 1 + inf
Intentar reducir la expresin inf siempre nos va a dar como resultado una
expresin ms y ms grande (independientemente de la estrategia de evaluacin
que usemos)
inf
aplicamos inf
1 + inf
aplicamos inf (porque + es estricta)
Unidad III
1 + (1 + inf)
aplicamos inf (porque + es estricta)
... 1 + (1 + (1 + (1 + (1 + (1 + .... + inf )))))
Por ende, est evaluacin nunca terminara.
Unidad III
[por def. de +]
[por def. de mult]
[por def. de +]
[por def. de +]
[por def. de *]
Bsqueda no determinista
Datos no deterministas
Requiere tipo de datos diferente como son
Data list m a =nil (cons (m a) (m (list a))
Puede representar lista perezosa no determinista
Cons [2] [nil. Cons [1] j]:: list [] int
Los argumentos de cons representan computacin no determinista, permute y
IsSorted se pueden adoptar a la lista de tipo permute y genera permutaciones
perezosamente los rendimientos IsSorted [true, false] es aplicada por encima de la
lista (s).
Unidad III