IF/Prologは、例外処理を容易に行うための汎用的なメカニズムを備えています。
例外処理は、ゴ−ルの評価中にエラ−が起きた場合、あるいはユ−ザがexception/2やraise_error/0,/1を使った場合に生じます。例外処理は、エラ−の性質を示す例外メッセ−ジによって識別されます。エラ−は通常、組み込み述語の引数の制限に違反することによって生じます。
ゴ−ルの評価中にエラ−によって例外処理(例外メッセ−ジであるMsgで識別される)が起きると、インタプリタは評価を中断し、例外処理"ExceptHandler"を探します(例外処理には、ユ−ザの望みのコ−ドを含めることができます)。
まず最初にIF/Prologは、現在の例外がユ−ザによってexception_handler/3で定義された(アサ−トされた)例外処理を持っているかどうかを調べます。
そうでない場合は、IF/Prologはerror_protect/2の最も最近の呼び出しで定義された例外処理を探します。
error_protect/2の場合には、現在の例外の例外メッセ−ジがExcept_handlerの最初の引数に単一化され、Except_handlerが実行されます。exception_handler/3の場合には、Except_handlerが単に実行されます。exception_handler/3は、error_protect/2を無効にすることに注意して下さい!
ユ−ザの定義した例外処理がない場合 デフォルトで、最も最近のerror_protect/2の呼び出しが、現在のインタプリタル−プによって呼び出されます。インタプリタによって定義された例外処理が実行されます。このデフォルトの例外処理は、標準エラ−出力に以下のようにプリントされます。
E X C E P T I O N:ExceptionMessage:CurrentGoal
"undefined_predicate"の例外は特別に扱われており、以下の述語を宣言することで例外の発生を避けることができます。
predicate([ +関数子1/アリティ1, +関数子2/アリティ2, ....])
この述語により宣言された、未定義の述語の呼び出しは、単に失敗します。