; After loading your interpreter and doing (rep), ; paste these expressions one-at-a-time into Scheme window. ; There will not be test cases on the server. (eval-one-exp ' (+ 5 (call/cc (lambda (k) (+ 6 (k 7)))))) ; 1. answer: 12 12 points (eval-one-exp ' (+ 3 (call/cc (lambda (k) (* 2 5))))) ; 2. answer: 13 4 points (begin (reset-global-env) (eval-one-exp ' (define xxx #f)) (eval-one-exp ' (+ 5 (call/cc (lambda (k) (set! xxx k) 2)))) (eval-one-exp ' (* 7 (xxx 4)))) ; answer: 9 13 points (eval-one-exp '(call/cc procedure?)) ; answer: #t 8 points (begin (reset-global-env) (eval-one-exp ' (define strange1 (lambda (x) (display 1) (call/cc x) (display 2) (newline)))) (eval-one-exp ' (strange1 (call/cc (lambda (k) (k k)))))) ; answer: 112 20 points ;; It was pointed out late in the process (Saturday evening) that thie ;; next test case violates the ""you do not have to support re-definition" rule. ;; Thus, below, I provide an alternative test case. You will get credit if your ;; interpreter passes either one. ; Original code. (eval-one-exp '(define tester (call/cc (lambda (k) (lambda (x) (if (= x 7) (k 1000) (+ x 4))))))) (eval-one-exp '(map tester '(1 3 5 7 9 11))) (eval-one-exp 'tester) ; answer: 1000 13 points ; Compliant alternative test code. Pas this test or the above test to ; earn the 13 points. (eval-one-exp '(define break-out-of-map #f)) (eval-one-exp ' (set! break-out-of-map (call/cc (lambda (k) (lambda (x) (if (= x 7) (k 1000) (+ x 4))))))) (eval-one-exp '(map break-out-of-map '(1 3 5 7 9 11))) (eval-one-exp 'break-out-of-map) ; answer: 1000 13 points ;; The next case does not count in Spring, 2014 because I added it late. ;; I will assign points to it for a future term. (eval-one-exp ' (define jump-into-map #f)) (eval-one-exp ' (define do-the-map (lambda (x) (map (lambda (v) (if (= v 7) (call/cc (lambda (k) (set! jump-into-map k) 100)) (+ 3 v))) x)))) (eval-one-exp ' (do-the-map '(3 4 5 6 7 8 9 10))) ; answer: (6 7 8 9 100 11 12 13) (eval-one-exp ' (list (jump-into-map 987654321))) ; answer: (6 7 8 9 987654321 11 12 13) ;---------------- exit (begin (reset-global-env) (eval-one-exp ' (+ 4 (exit 5 (exit 6 7))) ; answer (6 7) 5 points )) (begin (reset-global-env) (eval-one-exp ' (+ 3 (- 2 (exit 5))))) ; answer (5) 5 points (begin (reset-global-env) (eval-one-exp ' (- 7 (if (exit 3) 4 5)))) ; answer (3) 5 points (begin (reset-global-env) (eval-one-exp '(call/cc (lambda (k) (+ 100 (exit (+ 3 (k 12)))))))) ; Answer 12 8 points (begin (reset-global-env) (eval-one-exp '(call/cc (lambda (k) (+ 100 (k (+ 3 (exit 12)))))))) ; answer (12) 7 points