If one of the C "PL_" functions in SWI-Prolog.h
returns
failure, this can be either a Prolog-style failure (e.g. from
PL_unify() or PL_next_solution()) or an error. If the
failure is due to an error, it's usually best to immediately return to
Prolog - and this can be done with the PlCheckEx() function, which turns
a Prolog error into a C++ PlException
. PlCheckFail() calls
PlCheckEx() and additionally throws PlFail() if the failure is for
Prolog failure.
PlCheckEx() calls PL_exception() to see if there is a Prolog
exception; if so, the Prolog exception is converted to a
PlException
object, which is then thrown. For more details
on the C++ exceptions, see section 2.18.