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.