sexta-feira, 26 de fevereiro de 2010

try/catch em Scheme

Para quem não gosta da sintaxe para tratamento de exceções de handle-exceptions (SRFI-12), a seguir está uma pequena macro para transformar a sintaxe de handle-exceptions em uma com try/catch:

(define-syntax try
(syntax-rules (catch)
((_ attempt (catch exn handler ...))
(handle-exceptions exn
(begin handler ...)
attempt))))


Exemplos de uso:

(define (try-car l #!optional default)
(try (car l)
(catch exn default)))


csi> (try-car '(1 2 3 4))
1
csi> (try-car '())
#f
csi> (try-car '() '())
()

Nenhum comentário: