Ejercicio
Supone ambiente inicial env0
(x y z g)
(2 4 6 (closure '(x) +(x,3) empty-env))
Evaluar
letrec
f(x,y) = if >(x,0) then +((g y), (f -(x,2) y))
else (g (g (g +(x,y,z))))
in
(f z +(x,y))
graph TD
A["empty-env"] --> B["env0
x y z g
2 4 6 (closure '(x) +(x,3) empty-env)"]
B --> C["envR1
'(f)
'((x y))
if >(x,0) ..."]
A --> G1["env_proc_g1
x
6"]
A --> G2["env_proc_g2
x
6"]
A --> G3["env_proc_g3
x
6"]
A --> G4["env_proc_else_g1
x
12"]
A --> G4["env_proc_else_g2
x
15"]
A --> G5["env_proc_else_g3
x
18"]
C --> F1["envf1
x y
6 6"]
C --> F2["envf2
x y
4 6"]
C --> F3["envf3
x y
2 6"]
C --> F4["envf4
x y
0 6"]
- Sobre envR1 vamos a evaluar (f z +(x,y)) --> (f 6 6)
- Se sabe que f esta en un ambiente extendido recursivo, entonces mirar que pasa
- (f 6 6) = +((g 6), (f 4 6)) = +(9, (f 4 6)) = +(9,39) = 48
- (f 4 6) = +((g 6), (f 2 6)) = +(9, (f 2 6)) = +(9,30) = 39
- (f 2 6) = +((g 6), (f 0 6)) = +(9, (f 2 6)) = +(9,21) = 30
- (f 0 6) = (g (g (g +(x,y,z))))= (g (g (g 12))))= (g (g 15)) = = (g 18) = 21