During program development, programs are normally loaded using
consult/1,
or the list abbreviation. It is common practice to organise a project as
a collection of source-files and a load-file, a Prolog file
containing only use_module/[1,2]
or ensure_loaded/1
directives, possibly with a definition of the entry-point of
the program, the predicate that is normally used to start the program.
This file is often called load.pl
. If the entry-point is
called
go, a typical session starts as:
% pl <banner> 1 ?- [load]. <compilation messages> Yes 2 ?- go. <program interaction> |
When using Windows, the user may open load.pl
from the
Windows explorer, which will cause plwin.exe to be started in the
directory holding load.pl
. Prolog loads load.pl
before entering the toplevel.
There are various options if you want to make your program ready for real usage. The best choice depends on whether the program is to be used only on machines holding the SWI-Prolog development system, the size of the program and the operating system (Unix vs. Windows).
Especially on Unix systems and not-too-large applications, writing a shell-script that simply loads your application and calls the entry-point is often a good choice. A skeleton for the script is given below, followed by the Prolog code to obtain the program arguments.
#!/bin/sh base=<absolute-path-to-source> PL=pl exec $PL -f none -g "load_files(['$base/load'],[silent(true)])" -t go -- $* |
go :- unix(argv(Arguments)), append(_SytemArgs, [--|Args], Arguments), !, go(Args). go(Args) :- ... |
On Windows systems, similar behaviour can be achieved by creating a
shortcut to Prolog, passing the proper options or writing a .bat
file.
For larger programs, as well as for programs that are required run on systems that do not have the SWI-Prolog development system installed, creating a saved state is the best solution. A saved state is created using qsave_program/[1,2] or using the linker plld(1). A saved state is a file containing machine-independent intermediate code in a format dedicated for fast loading. Optionally, the emulator may be integrated in the saved state, creating a single-file, but machine-dependent, executable. This process is described in chapter 6.
This mechanism loads a series of Prolog source files and then creates a saved-state as qsave_program/2 does. The command syntax is:
% pl [option ...] [-o output] -c file ... |
The options argument are options to qsave_program/2 written in the format below. The option-names and their values are described with qsave_program/2.
--
option-name=
option-value
For example, to create a stan-alone executable that starts by
executing
main/0 and for which the source is
loaded through load.pl
, use the command
% pl --goal=main --stand_alone=true -o myprog -c load.pl |
This performs exactly the same as executing
% pl <banner> ?- [load]. ?- qsave_program(myprog, [ goal(main), stand_alone(true) ]). ?- halt. |
See also unix/1.