コンディションに関するエラー通知機構を呼び出す. 処理されるコンディションは,与えられた〈データ〉によって次のように なる. もし 〈データ〉 がコンディションであれば,そのコンディションを直接 エラーハンドラに与え処理を行なう. この場合は,〈引数〉が与えられるとエラーとなる. すなわち, errorは唯一の引数,コンディションとともに呼び出されな ければならない. もし 〈データ〉 がコンディションクラスであれば,使用されるコンディショ ンは,
の結果である. もし〈データ〉が文字列であれば,使用されるコンディションは,(apply make-condition 〈データ〉 〈引数〉
〈引数
〉)
(make-condition 'simple-errorの結果である. この時,文字列〈データ〉は関数 formatに与えるフォーマット文字列 であり,メッセージの出力結果は,次の式を実行した場合と同じである.
'format-string 〈データ〉
'format-arguments 〈引数〉
〈引数
〉)
(format *error-output*フォーマット文字列の詳細については,16.3節を参照されたい. もし〈データ〉が,コンディション,コンディションオブジェクト,文字列以 外の場合は,エラーとなる.
〈フォーマット〉〈引数〉
〈引数
〉)
以上のプロセスで生成,または,与えられたコンディションオブジェクトの コンディションクラスに適応したハンドラの探索を行ない,そのハンドラに 制御を移しコンディションの処理を行なう. もし,生成されたコンディションを処理するハンドラが探索できなかった場合, 大域変数 *debug-level*の値によって次のように処理がされる.
大域変数 *debug-level*の値が,
例:
次の例はの階乗
を計算する関数 factを定義している. 引数として数値以外の値が与えられた場合,クラス illegal-argumentの エラーを通知する. 引数として負の数が与えられた場合,
を返す.
(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))))))