Aborting is implemented by throwing the reserved exception
$aborted
. This exception can be caught using catch/3,
but the recovery goal is wrapped with a predicate that prunes the
choice-points of the recovery goal (i.e., as once/1)
and re-throws the exception. This is illustrated in the example below,
where we press control-C and `a'.
?- catch((repeat,fail), E, true). ^CAction (h for help) ? abort % Execution Aborted
halt(0)
.bugIn
the multi-threaded version, halt/0
does not work when not called from the main thread. In the
current system a permission_error
exception is raised.
Future versions may enable halt/0
from any thread.user_input
. See also the Prolog flag
history. The prolog/0
predicate is terminated (succeeds) by typing the end-of-file character
(typically control-D).
The following two hooks allow for expanding queries and handling the result of a query. These hooks are used by the top-level variable expansion mechanism described in section 2.8.
user
, normally not defined. Query
and
Bindings represents the query read from the user and the
names of the free variables as obtained using read_term/3.
If this predicate succeeds, it should bind Expanded and ExpandedBindings
to the query and bindings to be executed by the top-level. This
predicate is used by the top-level (prolog/0).
See also expand_answer/2
and
term_expansion/2.user
, normally not defined. Expand the
result of a successfully executed top-level query. Bindings
is the query
<Name>=<Value> binding list
from the query. ExpandedBindings must be unified with the
bindings the top-level should print.