Due: Tuesday, Dec 13th by 11:59 PM
Do the following two exercises from the textbook:
- Exercise 4.20 (on page 121): use lecture22.scm as a starting point
- Exercise 5.8 (on page 153): use lecture23.scm as a starting point see below
Here is a head start on Exercise 5.8: a version of the continuation-passing interpreter which
- accepts procedures with multiple parameters
- accepts procedure applications with multiple arguments
- has support for evaluating multiple argument expressions and binding them to parameters, but only evaluates and passes the result of the first argument expression
Testing for exercise 4.20:
% result should be 5 letmutable x = 4 in begin set x = 5; x end
% should fail with an error (assignment to immutable variable) let x = 4 in begin set x = 5; x end
Testing for exercise 5.8:
% result should be 5 let f = proc(x, y) -(x, -(0, y)) in (f 2 3)
You can add the following procedures to your programs to simplify testing:
(define expval->schemeval (lambda (result) (cases expval result (num-val (n) n) (bool-val (b) b) (proc-val (p) p)))) (define exec (lambda (progtext) (let* ((prog (parser progtext)) (result (value-of-program prog (empty-env)))) (expval->schemeval result))))
Use the exec procedure as follows:
(exec " program ")
(exec " let f = proc(x, y) -(x, -(0, y)) in (f 2 3) ")
should produce the result 5 when run using the finished interpreter for exercise 5.8.
- Exercise 4.20 - 50%
- Exercise 5.8 - 50%
Submit a zip file containing two Scheme files, one for exercise 4.20 and another for exercise 5.8.
Submit the zip file to Marmoset as assign7:
IMPORTANT: after uploading, you should download a copy of your submission and double-check it to make sure that it contains the correct file(s). You are responsible for making sure your submission is correct. You may receive a grade of 0 for an incorrectly submitted assignment.