- Documentation
- Reference manual
- Built-in Predicates
- Notation of Predicate Descriptions
- Character representation
- Loading Prolog source files
- Editor Interface
- Verify Type of a Term
- Comparison and Unification of Terms
- Control Predicates
- Meta-Call Predicates
- Delimited continuations
- Exception handling
- Printing messages
- Handling signals
- DCG Grammar rules
- Database
- Declaring predicate properties
- Examining the program
- Input and output
- Status of streams
- Primitive character I/O
- Term reading and writing
- Analysing and Constructing Terms
- Analysing and Constructing Atoms
- Localization (locale) support
- Character properties
- Operators
- Character Conversion
- Arithmetic
- Misc arithmetic support predicates
- Built-in list operations
- Finding all Solutions to a Goal
- Forall
- Formatted Write
- Global variables
- Terminal Control
- Operating System Interaction
- File System Interaction
- User Top-level Manipulation
- Creating a Protocol of the User Interaction
- Debugging and Tracing Programs
- Obtaining Runtime Statistics
- Execution profiling
- Memory Management
- Windows DDE interface
- Miscellaneous
- Built-in Predicates
- Packages
- Reference manual
4.37 User Top-level Manipulation
- break
- Recursively start a new Prolog top level. This Prolog top level shares
everything from the environment it was started in. Debugging is switched
off on entering a break and restored on leaving one. The break
environment is terminated by typing the system's end-of-file character
(control-D). If that is somehow not functional, the term
end_of_file.
can be entered to return from the break environment. If the -t toplevel command line option is given, this goal is started instead of entering the default interactive top level (prolog/0).Notably the gui based versions (swipl-win on Windows and MacOS) provide the menu Run/New thread that opens a new toplevel that runs concurrently with the initial toplevel. The concurrent toplevel can be used to examine the program, in particular global dynamic predicates. It can not access global variables or thread-local dynamic predicates (see thread_local/1) of the main thread.
- abort
- Abort the Prolog execution and restart the top level. If the
-t toplevel command line option is given,
this goal is restarted instead of entering the default interactive top
level.
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'. See also section 4.10.1.?- catch((repeat,fail), E, true). ^CAction (h for help) ? abort % Execution Aborted
- [ISO]halt
- Terminate Prolog execution. This is the same as
halt(0)
. See halt/1 for details. - [ISO]halt(+Status)
- Terminate Prolog execution with Status. This predicate calls
PL_halt() which
preforms the following steps:
- Set the Prolog flag exit_status
to Status.
- Call all hooks registered using at_halt/1.
If Status equals 0 (zero), any of these hooks calls cancel_halt/1,
termination is cancelled.
- Call all hooks registered using PL_at_halt(). In the future,
if any of these hooks returns non-zero, termination will be cancelled.
Currently, this only prints a warning.
- Perform the following system cleanup actions:
- Cancel all threads, calling thread_at_exit/1 registered termination hooks. Threads not responding within 1 second are cancelled forcefully.
- Flush I/O and close all streams except for standard I/O.
- Reset the terminal if its properties were changed.
- Remove temporary files and incomplete compilation output.
- Reclaim memory.
- Call exit(Status) to terminate the process
halt/1 has been extended in SWI-Prolog to accept the arg
abort
. This performs as halt/1 above except that:- Termination cannot be cancelled with cancel_halt/1.
- abort() is called instead of exit(Status).
- Set the Prolog flag exit_status
to Status.
- prolog
- This goal starts the default interactive top level. Queries are read
from the stream
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.9.
- expand_query(+Query, -Expanded, +Bindings, -ExpandedBindings)
- Hook in module
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. - expand_answer(+Bindings, -ExpandedBindings)
- Hook in module
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.