本節では,ユーザが新たにコンディションクラスを定義するために用意されて
いる機能について説明する.
(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: ... >