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.