Implementing CATCH and OOPS |
![]() ![]() |
(define (eval-catch exp env) ;; (CATCH name normal error) (let ((labels *labels*)) (define (done) (set! *labels* labels) (eval (fourth exp) env)) (add-label (second exp) done) (let ((result (eval (third exp) env))) (set! *labels* labels) result))) (define (eval-oops exp env) ;; (OOPS name) (let ((label (find-label (second exp)))) (if label (label) (error "No handler for error" name))))
Jim Miller | ![]() |