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.
TÉCNICAS DE LA
EVALUACIÓN
FUNCIONAL
TÈCNICA DE BACKTRAKING
Si una alternativa falla, el
flujo retrocede hasta la
ultima desicioó e intenta
de nuevo.
TÉCNICA DE GUARDIAS
Si mas de una es cierta, se
escoge cualquiera de ellas.
TÉCNICA DE APRENDIZAJE REFORSADO
Recordar decisiones exitosas y aumentar su
prioridad así como considerar las decisiones
en el contexto del estado mutable.
TIPOS DE ESTRATEGIAS
De adentro hacia
fuera o Call - by - value
Esta estrategia elige el redex que esta mas
adentro, entendiendo que el redex no tiene otro
redex. Si existe mas de un redex que cumple dicha
condición se elige el que esta mas a la izquierda.
De afuera hacia adentro
o Call - by - name
Elije al redex que se encuentra mas
afuera. Si existe mas de un redex, que
cumple dicha condición se elige el que
esta mas a la izquierda.
Evaluaciones
que no terminan
VENTAJAS Y DESVENTAJAS
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.
Los lenguajes
perezosos usan evaluación perezosa; es decir, al evaluar una expresión
evalúan sus argumentos sólo cuando los necesita. De manera opuesta, en la
evaluación impaciente los argumentos de las expresiones se evalúan antes
que las expresiones. En esta entrada presento un ejercicio para Informática
(del Grado de Matemáticas) con objeto de resaltar la ventaja de la
evaluación perezosa de Haskell frente a la evaluación impaciente de Maxima.
Para ello compararé sus rendimientos al calcular los k primeros elementos
de una lista con definiciones semejantes en Haskell y Maxima.