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.
user_input. See also the
historyprolog_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.