本節では,ユーザが新たにコンディションクラスを定義するために用意されて
いる機能について説明する.
(define-condition 《名前》《リスト》 (《スロット》
《スロット
》)《レポート関数》)) 【マクロ】
(define-condition 《名前》《リスト》 (《スロット》
《スロット
》)《文字列》)) 【マクロ】
《名前》 という名前の新しいコンディションクラスのクラスを定義す る. 定義されたコンディションのクラスは, 《リスト》で与えられるクラス をダイレクトスーパークラスとするクラスであり, 《リスト》で指定さ れたクラスのダイレクトサブクラスとなる. 《スロット》
《スロット
》で指定された各スロットは,定 義したクラスが固有に持つスロットとなる. また, 《リスト》で指定したダイレクトスーパークラスが持つスロット を継承する. 《レポート関数》は,コンディションオブジェクトと出力ストリームの2引数 をとる関数,で与える. 《レポート関数》の代わりに,《文字列》を与えると,内部で次のよ うに置き換えられる.
(lambda (condition stream) (format stream 《文字列》))
例:次の例はコンディションクラス conditionをダイレクトスーパークラス とするコンディション my-conditionを定義している. my-conditionは, slot-a, slot-b, slot-cという クラス固有のスロットを3つ持っている.
> (define-condition my-condition (condition) (slot-a slot-b slot-c) (lambda (c s) (format s "Signalled MY-CONDITION."))) #t > (error 'my-condition) Condition: Signalled MY-CONDITION. Backtrace: ... >