Mult(1+2,2+3)
Aplicamos el primer
+ Mult(3,2+3)
Aplicamos +
Mult(3,5) Aplicamos
el mult 3*5
Aplicamos * 15
De afuera hacia adentro
(call by name)
se elige al redex que esta
mas afuera, si existe mas de
un redex se elige el que esta
mas a la izquierda
Ejemplo:
Mult(1+2,2+3)
Aplicamos mult
(1+2)*(2+3) Aplicamos
el primer + 3*(2+3)
Aplicamos + 3*5
Aplicamos * 15
Evaluaciones
que no terminan
Intentar reducir la expresión inf siempre nos va a
dar como resultado una expresión mas y mas
grande (independiente de la estrategia de
evaluación que usemos) inf
Ejemplo:
Aplicamos inf 1+ inf
Aplicamos inf (porque +
es estricta) 1+(1+inf)
Aplicamos inf (porque +
es estricta)
…1+(1+(1+(1+(1+…+inf))))
Por ende, esta evaluacion
nunca terminaría.
Sabiendo que Fst(x,_)=x
Consideramos la
expresión fst(0,inf)
Técnicas de programación funcional perezosa
Para el no determinismo es
la elección en la invocación ( call time choce)
No deterministico
Técnicas:
Técnica de Backtracking (prolog:)
Si una alternativa
"falla", el flujo retorna
hasta la última decisión
e intenta otra.
Técnica de guardias (guards:)
Si más de una es
cierta, se escoge
cualquiera de ellas.
Técnica de aprendizaje reforzado (A-LISP):
recordar decisiones exitosas y
aumentar su prioridad así como
considerar las decisiones en el
contexto del estado mutable