The embedded SWI-Prolog runtime must be initialized before it can start executing queries. Normally, Sweep takes care of initializing Prolog for you the first time you use a command that requires running some Prolog code. This section elaborates about Prolog initialization and its customization options in Sweep:
List of strings used as initialization arguments for Prolog. Sweep
uses these as the args argument of sweeprolog-initialize
when it initializes Prolog on-demand.
Sweep loads and initializes Prolog on-demand at the first invocation
of a command that requires the embedded Prolog. The user option
sweeprolog-init-args
says which arguments to pass to Prolog
initialization. Its value is a list of strings that you can extend if
you want to pass specific command line flags SWI-Prolog. For example,
to limit the embedded Prolog stack to 512 MB, add the following to
your Emacs configuration:
(with-eval-after-load 'sweeprolog (push "--stack-limit=512m" sweeprolog-init-args))
Sweep initializes Prolog from Elisp by calling function
sweeprolog-initialize
.
Initialize the embedded Prolog runtime. prog should be the path
to the swipl
executable, and args should be a list of
command line arguments for swipl
. Sweep initializes Prolog
as if it was started from the command line as prog
args
.
The function sweeprolog-initialize
takes one or more string
arguments and initializes the embedded Prolog as if it were invoked
externally in a command line with the given strings as command line
arguments, where the first argument to sweeprolog-initialize
corresponds to argv[0]
. This function is implemented in C in
sweep-module
(see High-level Architecture).
The default value of sweeprolog-init-args
is set to load the
Prolog helper library sweep.pl and to create a boolean Prolog
flag called sweep
with value true
. You can check for
this flag in Prolog code to detect at runtime that you’re running
under Sweep.
It is also possible to specify initialization arguments to SWI-Prolog
by passing them as command line arguments to Emacs, which can be
convenient when using Emacs and Sweep as an alternative for the common
shell-based interaction with SWI-Prolog. This is achieved by adding
the flag --swipl-args followed by any number of arguments
intended for SWI-Prolog, with a single semicolon (;
) argument
marking the end of the SWI-Prolog arguments, after which further
arguments are processed by Emacs as usual (see (emacs)Emacs
Invocation for more information about Emacs’s command line
options), for example:
emacs --some-emacs-option --swipl-args -l foobar.pl \; --more-emacs-options
In order for Sweep to be able to handle Emacs’s command line
arguments, you must call sweeprolog-handle-command-line-args
before Emacs processes the --swipl-args argument.
Enable support for the Sweep-specific --swipl-args Emacs command line flag. This flag can be used to specify additional Prolog initialization arguments for Sweep to use when initializing Prolog on-demand, directly from Emacs’s command line invocation.
This function makes Emacs recognize the --swipl-args command
line flag by adding a dedicated handler function to
command-line-functions
(see (elisp)Command-Line
Arguments). If you want to use --swipl-args, you
should arrange for command-line-functions
to run before Emacs
processes --swipl-args. To do that, either place a call
sweeprolog-handle-command-line-args
in your Emacs
configuration, or call it from the command line right before
--swipl-args:
emacs -f sweeprolog-handle-command-line-args --swipl-args -l foobar.pl \;
You can shut down or restart the embedded Prolog runtime using the following commands:
Shut down the embedded Prolog runtime.
Restart the embedded Prolog runtime.
The command sweeprolog-shutdown
shuts down the Prolog runtime
and frees up resources Prolog allocated. You cannot shut down Prolog
with running top-levels (see The Prolog Top-level)—if you invoke
sweeprolog-shutdown
while you have running top-levels, this
command suggests killing them, and if you refuse it complains and
keeps Prolog running. The command sweeprolog-restart
is
similar to sweeprolog-shutdown
, expect it starts the embedded
Prolog runtime anew after shutting it down. When you invoke
sweeprolog-restart
with a prefix argument (C-u M-x
sweeprolog-restart RET), this command prompts for additional
initialization arguments to pass to the embedded Prolog runtime when
restarting it.