 setup_call_catcher_cleanup(:Setup, 
:Goal, +Catcher, :Cleanup)
setup_call_catcher_cleanup(:Setup, 
:Goal, +Catcher, :Cleanup)setup_call_cleanup(Setup, Goal, Cleanup) with 
additional information on the reason for calling Cleanup. 
Prior to calling Cleanup, Catcher unifies with the 
termination code (see below). If this unification fails, Cleanup 
is
not called.
!
?- setup_call_catcher_cleanup(true, (X=1;X=2),
                              Catcher, writeln(Catcher)),
   throw(ball).
external_exception(ball)
ERROR: Unhandled exception: Unknown message: ball