SWI-Prolog for MS-Windows
Jan Wielemaker
SWI,
University of Amsterdam
The Netherlands
E-mail: jan@swi-prolog.org
This document should get you started using SWI-Prolog on MS-Windows. It also describes the components and issues that are specific to MS-Windows. It is by no means a manual or Prolog tutorial. The reference manual is available online or can be downloaded in HTML and PDF format from the SWI-Prolog website, which also provides links to books, online tutorials and other Prolog related material. |
The SWI-Prolog executable plwin.exe can be started from the
StartMenu or by opening a .pl
file holding Prolog
program text from the Windows explorer. (1)
The installation folder (by default C:\Program Files\pl
)
contains a subfolder demo
with the file likes.pl
.
This file can be opened in Prolog from the StartMenu, by opening likes.pl
in the Windows explorer or using the following command in the Prolog
application. Be sure to get the quotes right and terminate the command
with a full-stop (
).
.
?- [swi('demo/likes')]. |
After loading a program, one can ask Prolog queries about the program. The query below asks Prolog what food `sam' likes. The system responds with X = <value> if it can prove the goal for a certain X. The user can type the semi-colon (;) (2) if (s)he wants another solution, or RETURN if (s)he is satisfied, after which Prolog will say Yes. If Prolog answers No, it indicates it cannot find any (more) answers to the query. Finally, Prolog can answer using an error message to indicate the query or program contains an error.
?- likes(sam, X). X = dahl ; X = tandoori ; ... X = chips ; No ?- |
The SWI-Prolog console provided by plwin.exe has a menu for accessing the most commonly used commands. We assume not all menu entries need to be explained in details. We make some exceptions:
pl.ini
that contains commonly
used settings in comments.
There are three options for editing. One is to run an editor of choice in a separate window and use the below described make/0 command to reload modified files. In addition to this option Prolog can be used to locate predicates, modules and loaded files by specifying the editor of choice for use with the edit/1 command described below. This is achieved by editing the personalisation file (see section 1.3) and follow the instructions in the comments.
Finally, you may wish to use the built-in editor called PceEmacs.
This editor provides colourisation support based on real-time parsing
and cross-reference analysis of the program. It is started using the
command ?- emacs.
or can be set as default editor in the
personalisation file.
This section provides a very brief overview of important or commonly used SWI-Prolog predicates to control the environment.
\
, which must be escaped or using
the POSIX standard
/
. Especially when used in source-code /
is to be preferred as it is portable. A Prolog list ([ ... ]) can be
used to abbreviate the consult command. The file-extension (.pl
as well as the selected alternative) can be omitted. Here are some
examples:
?- consult(likes). | Load likes.pl
from the current folder (see pwd/0). |
?- ['C:/Program Files/pl/demo/likes'] | Load likes.pl
using absolute path. |
?- ['C:\ \ Program Files\ \ pl\ \ demo\ \ likes'] | Same using Windows-style path-name |
.pl
file in the explorer,
edit this file. Also available from the menu.
?- trace, run.
and finally you can include it in
your program to start tracing at a particular point or under a
particular condition:
..., (var(X) -> trace ; true), ..., |
Using MSVC or a compiler with compatible calling format you can write C or C++ code that can be loaded into SWI-Prolog and called as a predicate. You can also embed SWI-Prolog in C/C++ applications.
Details on how to interact with Prolog are in the SWI-Prolog reference manual. The mailing list archives and TWiki web provide problems and solutions to the many problems that may occur. This section only discusses some Windows specific issues.
First of all, add the include
folder of the installation
to the search-path for headers and the lib
folder to the
search-path for libraries. Both DLLs (extensions) or embedded
executables should link to libpl.lib
and, if appropriate,
to msvcrt.lib
, the multi-threaded DLL version of the MSVC
runtime library.
To create extensions, simply use the Win32 DLL project template. To
embed Prolog, care should be taken that Prolog can find the Prolog
installation. For development, the simplest way to ensure this
is by adding the installation bin
folder to the %PATH%
environment and call PL_inifialise() as illustrated below.
PL_inifialise() uses the path of the loaded libpl.dll
module to find the Prolog installation folder.
{ static char *av[] = { "libpl.dll", NULL }; if ( !PL_inifialise(1, av) ) { <error> } } |
To create an executable that does not rely on Prolog one must create
a saved-state of the required Prolog code and attach this to the
executable. Creating saved-states is described with qsave_program/2
in the reference manual. This can be attached to a state using the DOS
command below to create final.exe
from the executable
produced by MSVC and the generated saved-state.
> copy /b file.exe+file.state final.exe |
The plld.exe automates most of the above complications and
provides compatibility for common tasks on many platforms supported by
SWI-Prolog. To use it with MSVC, set the PATH, INCLUDE and LIB
environment to find the DevStudio tools, headers and libraries as well
as the Prolog ones described above. Now, an extension
myext.dll
is created from the source myext.c
using
> plld -shared -o myext myext.c |
An embedded executable is created from C, C++ and Prolog files using
> plld -o myexe file.c ... file.pl ... |
By default, Prolog uses the .pl
extension to indicate
Prolog source-files. Unfortunately this extension conflicts with the
Perl language. If you want to use both on the same Windows machine
SWI-Prolog allows you to choose a different extension during the
installation. The extension .pro
is a commonly used
alternative. If portability is an issue, it is advised to use the
alternative extension only for the
load file, the source-file that loads the entire program and
use the normal .pl
extension for libraries and files loaded
from other files.
The following tools and programs are installed:
Programs | |
bin\plwin.exe | Default Windows application for interactive use. |
bin\plcon.exe | Console-based version for scripting purposes. |
Utilities | |
bin\plld.exe | Linker front-end to make single-file mixed Prolog/C/C++ executables. |
bin\plrc.exe | Manipulate Prolog resource files. |
Important directories | |
bin | Executables and DLL files |
library | Prolog library |
boot | Sources for system predicates |
include | C/C++ header files for embedding or to create extensions |
xpce | XPCE graphics system |
xpce\prolog\lib | XPCE/Prolog library |
DLLs and other supporting files | |
boot32.prc | Prolog resource file containing system predicates |
\bin\libpl.dll | The Prolog kernel |
\bin\plterm.dll | The window for plwin.exe |
\bin\pthreadVC.dll | POSIX thread runtime library |
\bin\msvcrt.dll | Microsoft C runtime library |
Extension DLLs (plugins) | |
\bin\xpce2pl.dll | The XPCE graphics system |
\bin\socket.dll | Prolog socket interface |
\bin\time.dll | Timing and alarm library |
\bin\cgi.dll | Gather CGI GET and POST arguments |
\bin\odbc4pl.dll | ODBC interface |
\bin\sgml2pl.dll | SGML/XML parser |
\bin\table.dll | Access structured files as tables |
The filetype .pl
or chosen alternative (see section
3.1) is associated to plwin.exe. A chosen folder (default
SWI-Prolog) is added to the start-menu holding shortcuts to Prolog and
some related utilities. The following registry keys are in use:
HKEY_LOCAL_MACHINE\ Software\ SWI\ Prolog | |
fileExtension | Extension used for Prolog files |
group | Start-menu group |
cwd | Default folder for shortcut |
home | Installation directory |
HKEY_CURRENT_USER\ Software\ SWI\ Prolog | |
localSize | Default local stack size (KB) |
globalSize | Default global stack size (KB) |
trailSize | Default trail stack size (KB) |
argumentSize | Default argument stack size (KB) |
HKEY_CURRENT_USER\ Software\ SWI\ Plwin\ Console | |
Note: thread-windows store the same info in sub-keys | |
Height | Height of window in character units |
Width | Width of window in character units |
X | Left-edge of window in pixel units |
Y | Top-edge of window in pixel units |
SaveLines | Number of lines available for scrollback |
The SWI-Prolog web-site is located at http://www.swi-prolog.org/. Part of the web is powered by TWiki, a wiki web that can be edited by any registered user and used to exchange ideas, problems and solutions. The web also provides access to the archive of the mailinglist and allows to (de)register the mailinglist. Finally, it incorporates Bugzilla, the Mozilla project bugtracking system, for reporting bugs and tracking issues.
The SWI-Prolog license allows it to be used in a wide variety of environments, including closed-source commercial applications. In practice, redistribution and embedding is allowed, as long as modifications to the SWI-Prolog source are published following the Free Software rules.
The SWI-Prolog kernel and foreign libraries are licensed under the Lesser General Public License (LGPL). The Prolog files are licensed under the normal General Public License GPL with an additional statement that allows for embedding in proprietary software:
As a special exception, if you link this library with other files, compiled with a Free Software compiler, to produce an executable, this library does not by itself cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License.
This exception is a proven construct used for libgcc, the GNU C-compiler runtime library.
There are several ways to support SWI-Prolog: