In the single-threaded version abort/0
is implemented using a C-longjmp() call, after which the Prolog stacks
are emptied, relevant reference-counts and some other global data is
reset, after which the system is restarted. This approach allows Prolog
to recover from internal consistency problems such as garbage-collection
errors. The multi-threaded version implements abort/0
by generation an exception
$aborted. This approach is less secure if the system is in
an unhealthy state, but required to ensure consistency of the other
threads as well as mutexes.
halt(0).
user_input. See also the history
prolog_flag (current_prolog_flag/2).
The prolog/0
predicate is terminated (succeeds) by typing the end-of-file character
(On most systems control-D).
The following two hooks allow for expanding queries and handling the result of a query. These hooks are used by the toplevel 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 toplevel. This predicate
is used by the toplevel (prolog/0).
See also expand_answer/2
and
term_expansion/2.
user, normally not defined. Expand the
result of a successfully executed toplevel query. Bindings is
the query
<Name>=<Value> binding list
from the query. ExpandedBindings must be unified with the
bindings the toplevel should print.