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)
.
See
halt/1
for details.
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.