(interp (app (fun 'f (app (id 'f) (num 8))) ; {{fun {f} {f 8}} (fun 'y (add (id 'y) (num 4)))) ; {fun {y} {+ y 4}}} (mtSub)) ... (interp (fun 'f (app (id 'f) (num 8))) (mtSub)) returns (closureV 'f (app (id 'f) (num 8)) (mtSub)) ... (interp (fun 'y (add (id 'y) (num 4))) (mtSub)) returns (closureV 'y (add (id 'y) (num 4)) (mtSub)) ... (interp (app (id 'f) (num 8)) ;; ds1 = (aSub 'f (closureV 'y (add (id 'y) (num 4)) (mtSub)) (mtSub))) .... (interp (id 'f) ds1) returns (closureV 'y (add (id 'y) (num 4)) (mtSub)) ... (interp (num 8) ds1) returns (numV 8) ... (interp (add (id 'y) (num 4)) ;; ds2 = (aSub 'y (numV 8) (mtSub))) .... (interp (id 'y) ds2) returns (numV 8) ... (interp (num 4) ds2) return (numV 4) ...returns (numV 12)