例外を発生させる


Tags: R6RS, 例外処理

例外を発生させる手続きには raiseraise-continuable がある。 raise で発生させた例外は例外ハンドラから戻ると &non-continuable コンディションを含む例外をさらに発生させる。一方、例外を raise-continuable で発生させた場合には、ハンドラの戻した値が raise-continuable の継続に引き渡される。

(import (rnrs))

(with-exception-handler
    (lambda (exc)
      4)
  (lambda ()
    (* (raise-continuable 1)
       3)))
;; => 12

またさらにエラーを通知することも例外を発生させることと同義である。例えば、 error 手続きは次のようにして raise を使って定義することができる。

(import (except (rnrs) error))

(define (error who message . irritants)
  (raise (apply condition
                (make-error)
                (make-message-condition message)
                (make-irritants-condition irritants)
                (if who (make-who-condition who) '()))))