There are two implementations of abort/0.
The default one uses the exception mechanism (see throw/1),
throwing the exception
$aborted
. The other one uses the C-construct longjmp() to
discard the entire environment and rebuild a new one. Using exceptions
allows for proper recovery of predicates exploiting exceptions.
Rebuilding the environment is safer if the Prolog stacks are corrupt.
Therefore the system will use the rebuild-strategy if the abort was
generated by an internal consistency check and the exception mechanism
otherwise. Prolog can be forced to use the rebuild-strategy setting the
Prolog flag abort_with_exception
to false
.
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.