next up previous contents index
: 警告通知関数 : コンディションの通知 : コンディション通知関数   目次   索引


エラー通知関数

(error 〈データ〉〈引数$_1$$\cdots$〈引数$_n$〉) 【関数】

コンディションに関するエラー通知機構を呼び出す. 処理されるコンディションは,与えられた〈データ〉によって次のように なる. もし 〈データ〉 がコンディションであれば,そのコンディションを直接 エラーハンドラに与え処理を行なう. この場合は,〈引数〉が与えられるとエラーとなる. すなわち, errorは唯一の引数,コンディションとともに呼び出されな ければならない. もし 〈データ〉 がコンディションクラスであれば,使用されるコンディショ ンは,
(apply make-condition 〈データ〉 〈引数$_1$$\cdots$ 〈引数$_n$〉)
の結果である. もし〈データ〉が文字列であれば,使用されるコンディションは,

(make-condition 'simple-error

'format-string 〈データ〉
'format-arguments 〈引数$_1$$\cdots$ 〈引数$_n$〉)
の結果である. この時,文字列〈データ〉は関数 formatに与えるフォーマット文字列 であり,メッセージの出力結果は,次の式を実行した場合と同じである.

(format *error-output*  

〈フォーマット〉〈引数$_1$$\cdots$〈引数$_n$〉)
フォーマット文字列の詳細については,16.3節を参照されたい. もし〈データ〉が,コンディション,コンディションオブジェクト,文字列以 外の場合は,エラーとなる.

以上のプロセスで生成,または,与えられたコンディションオブジェクトの コンディションクラスに適応したハンドラの探索を行ない,そのハンドラに 制御を移しコンディションの処理を行なう. もし,生成されたコンディションを処理するハンドラが探索できなかった場合, 大域変数 *debug-level*の値によって次のように処理がされる.

大域変数 *debug-level*の値が,

例:

次の例は$n$の階乗$n!$を計算する関数 factを定義している. 引数として数値以外の値が与えられた場合,クラス illegal-argumentの エラーを通知する. 引数として負の数が与えられた場合,$-((-n)!)$ を返す.

(define (fact n)
  (cond 
    ((not (number? n))
     (error 'illegal-argument
            'message (format #f "~a is not a number." n)
            'function fact
            'arguments (list n)))
    ((< n 0) (- (fact (- n))))
    ((= n 0) 1)
    (else (* n (fact (1- n))))))



Tsuneyasu KOMIYA 平成14年2月22日