Punto 2 Análisis de código
(35 puntos) Dibuje los ambientes generados por la siguiente expresión, suponga como ambiente inicial el vacío.
let
a = let x = 5 in *(2,x)
b = letrec f(n) = if <(n,1) then 1 else *(n, (f -(n,1))) in (f 4)
c = proc (m) let x = *(m,2) in +(x,m)
in
let
d = proc (n) proc (m ) +(n,m)
e = letrec h(n,m) = if >(n,0) then +(m, (h -(n,1) +(m,1))) else 0 in (h 5 (c 3))
in
((d (c +(a, b))) e)
Los ambientes generados son:
flowchart LR
A["Empty env"]
B["env0
a,b,c
10,24,
closure .. empty-env
"]
C["env1
d,e
closure .. env0, 55
"]
D["envx
x
5
"]
E["envrb
(f)
((n))
if ...."
]
F1["envf1
n
4"]
F2["envf2
n
3"]
F3["envf3
n
2"]
F4["envf4
n
1"]
F5["envf5
n
0"]
G["envc
m
3"
]
GX["envcx
x
6"
]
H["envre
(h)
((m,n))
....
"
]
H1["envh1
m,n
5,9"]
H2["envh2
m,n
4,10"]
H3["envh3
m,n
3,11"]
H4["envh4
m,n
2,12"]
H5["envh5
m,n
1,13"]
H6["envh6
m,n
0,14"]
H7["envh7
m,n
5,9"]
I["envc2
m
34"
]
IX["envcx2
x
68"
]
J["envd
n
102
"]
K["envprocd
m
55"
]
A --> B
B --> C
A --> D
A --> E
E --> F1
E --> F2
E --> F3
E --> F4
E --> F5
A --> G
G --> GX
B --> H
H --> H1
H --> H2
H --> H3
H --> H4
H --> H5
H --> H6
H --> H7
A --> I
I --> IX
B --> J
J --> K
En total 102 + 55 = 157