fork download
  1. ; replace exceptions with defaults
  2.  
  3. (import (rnrs exceptions (6)))
  4.  
  5. (define-syntax try
  6. (syntax-rules (trying)
  7. ((try trying expr default)
  8. (call-with-current-continuation
  9. (lambda (return)
  10. (with-exception-handler
  11. (lambda (x) (return default))
  12. (lambda () expr)))))
  13. ((try) #f)
  14. ((try expr) (try trying expr #f))
  15. ((try expr0 expr1 ...)
  16. (let ((t (try trying expr0 #f)))
  17. (if t t (try expr1 ...))))))
  18.  
  19. (display (try (car '()) #f)) (newline)
  20. (define a-list '((1 . 1) (3 . 3) (5 . 5)))
  21. (define (lookup x) (try (cdr (assoc x a-list)) x))
  22. (display (lookup 4)) (newline)
  23. (display (try (car '()) (+ 2 2))) (newline)
Success #stdin #stdout 0.06s 9724KB
stdin
Standard input is empty
stdout
#f
4
4