K-Prolog Compiler Version 6.0 
catch/3に指定するCatcher は任意の項です。
throw による Catcher の検索は、
最後に実行された catch から順に行います。
たとえば、throw(tag1(someinfo)) は、catch(Goal,tag1(X),recovery(X)) でつかまえる
ことができます。
このとき、Goal は失敗して単一化の効果は失われますが、Catcher同士は
副作用として一致させられるので、上例で X は someinfo になります。
Goal の中で、Catcher とマッチする throw が行われなければ、catch の実行は
Goalの実行と等価です。
もし、throw されたCatcherを受け取るcatch/3の呼び出しがなければ、 トップレベルでは既定のメッセージが表示されます。トップレベルを 持たずに実行している場合は、致命的なエラーとして扱われます。 throw は割り込み処理や 例外処理を行う述語の中に書くことができます。
[例] :- on_interrupt(onintr). onintr :- throw(cond(intr)). と catch(Goal,cond(Code),true)によって、割り込みによってGoalを強制的に終了させられます。