(interp (parse `{{let/cc k k} {lambda {f} 2}}) mt-env (doneK)) ;; Since the continuation of `{let/cc k k}` is ;; analogous to {____ {lambda {f} 2}} ;; which we might write in function form as {lambda {v} {v {lambda {f} 2}}} ;; the orignal expression is analogous to {{lambda {v} {v {lambda {f} 2}}} {lambda {f} 2}} ; ---------------------------------------- (interp (parse `{let/cc k k}) mt-env K1 = (appSecondK (parse `{lambda {f} 2}) mt-env (doneK))) (interp (parse `k) (extend-env (bind 'k (contV K1)) mt-env) K1) (continue K1 (contV K1)) (interp (parse `{lambda {f} 2}) mt-env ; not E1! (doAppK (contV K1) (doneK))) (continue (doAppK (contV K1) (doneK)) V1 = (closV 'f (parse `2) mt-env)) (continue K1 V1) ;; deja vu, but a different value in `doAppK` (interp (parse `{lambda {f} 2}) mt-env ; not E1! (doAppK V1 (doneK))) (continue (doAppK V1 (doneK)) V2 = (closV 'f (parse `2) mt-env)) ; same as V1 (interp (parse `2) (extend-env (bind 'f V2) mt-env) (doneK)) (continue (doneK) (numV 2))