racket/collects/srfi/34/exception.rkt
2010-04-27 16:50:15 -06:00

27 lines
844 B
Racket

;; SRFI 34 for PLT Scheme
;; Zhu Chongkai, April 2005
;; <mrmathematica@yahoo.com>
(module exception mzscheme
(provide with-exception-handler
guard
raise)
(define-syntax with-exception-handler
(syntax-rules ()
((_ handler thunk)
(with-handlers (((lambda (exn) #t) handler)) (thunk)))))
(define-syntax guard
(syntax-rules (else)
((_ (var clause ... (else de ...)) e1 e2 ...)
(with-handlers (((lambda (exn) #t)
(lambda (var) (cond clause ...
(else de ...)))))
e1 e2 ...))
((_ (var clause ...) e1 e2 ...)
(with-handlers (((lambda (exn) #t)
(lambda (var) (cond clause ...
(else (raise var))))))
e1 e2 ...)))))