% cs217d13.dl let x = 5 in x % Ex 3.5.11, p 82 let a = 1 in let a = 3 in let p = proc (x) +(x, a) a = 5 in *(a, (p 2)) % Ex 3.5.12, p 82 -- recursion works with dynamic binding let fact = proc (n) add1(n) in let fact = proc (n) if zero?(n) then 1 else *(n, (fact sub1(n))) in (fact 5) % Ex 5.5.13, p 82 let a = 1 in let a = 3 p = proc () a in let f = proc (x) (p) a = 5 in (f 2) let a = 1 in let a = 3 p = proc () a in let f = proc (a) (p) a = 5 in (f 2) % makemult, p 80 let makemult = proc (maker, x) if zero?(x) then 0 else +(4, (maker maker sub1(x))) in let times4 = proc (x) (makemult makemult x) in (times4 3) % Abstracting the body of the intended recursive function let e = proc (f, x) if zero?(x) then 0 else +(4, (f sub1(x))) in let fm = proc (m, x) (e proc(x) (m m x) x) in let f = proc (x) (fm fm x) in (f 3) % Ex 3.5.3, p 80 % factorial let e = proc (f, x) if zero?(x) then 1 else *(x, (f sub1(x))) in let fm = proc (m, x) (e proc(x) (m m x) x) in let f = proc (x) (fm fm x) in (f 5)