The following interactions window transcript shows the results of defining and evaluating several expressions using the HW5 MUPL interpreter. These are similar to the demo in class. Lines beginning with '>' are input typed in the interactions window.
> (eval-exp (int 17)) (int 17) > (eval-exp (var "x")) . . unbound variable during evaluation "x" > (mlet "x" (int 17) (var "x")) (mlet "x" (int 17) (var "x")) > (eval-exp (mlet "x" (int 17) (var "x"))) (int 17) > (define letexpr (mlet "x" (int 17) (add (var "x") (int 1)))) ; name mupl expr > letexpr (mlet "x" (int 17) (add (var "x") (int 1))) > (eval-exp letexpr) (int 18) > (fun "id" "x" (var "x")) (fun "id" "x" (var "x")) > (eval-exp (fun "id" "x" (var "x"))) (closure '() (fun "id" "x" (var "x"))) > (define muplid (fun null "x" (var "x"))) > muplid (fun '() "x" (var "x")) > (eval-exp muplid) (closure '() (fun '() "x" (var "x"))) > (eval-exp (call muplid (int 42))) (int 42) > (eval-exp (mlet "x" (int 17) (add (var "x") (int 1)))) (int 18) > (eval-exp (mlet "x" (int 17) (fun "f" "y" (add (var "x") (var "y"))))) (closure (list (cons "x" (int 17))) (fun "f" "y" (add (var "x") (var "y")))) > (define func (eval-exp (mlet "x" (int 17) (fun "f" "y" (add (var "x") (var "y")))))) > func (closure (list (cons "x" (int 17))) (fun "f" "y" (add (var "x") (var "y")))) > (call func (int 1)) (call (closure (list (cons "x" (int 17))) (fun "f" "y" (add (var "x") (var "y")))) (int 1)) > (eval-exp (call func (int 1))) (int 18) > (define mupl-addseq (fun "addseq" "n" (ifnz (var "n") (int 1) (int 0)))) > (eval-exp mupl-addseq) (closure '() (fun "addseq" "n" (ifnz (var "n") (int 1) (int 0)))) > (call mupl-addseq (int 0)) (call (fun "addseq" "n" (ifnz (var "n") (int 1) (int 0))) (int 0)) > (eval-exp (call mupl-addseq (int 0))) (int 0) > (eval-exp (call mupl-addseq (int 1))) (int 1) > (define mupl-addseq (fun "addseq" "n" (ifnz (var "n") (int 1) (call (var "addseq") (int 2))))) > (eval-exp (call mupl-addseq (int 1))) (int 1) > (eval-exp (call mupl-addseq (int 0))) (int 1) > (define mupl-sumseq (fun "sumseq" "n" (ifnz (var "n") (add (var "n") (call (var "sumseq") (add (var "n") (int -1)))) (int 0)))) > (eval-exp (call mupl-sumseq (int 0))) (int 0) > (eval-exp (call mupl-sumseq (int 1))) (int 1) > (eval-exp (call mupl-sumseq (int 2))) (int 3) > (eval-exp (call mupl-sumseq (int 3))) (int 6)