From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Original author(s)Jan Wielemaker
Developer(s)Jan Wielemaker, Anjo Anjewierden, etc
Initial release1987; 34 years ago (1987)
Stable release
8.4.1 / 16 November 2021; 19 days ago (2021-11-16)
Preview release
8.5.2 / 12 November 2021; 23 days ago (2021-11-12)
Written inC, Prolog
Operating systemCross-platform
Available inEnglish
TypeLogic programming
LicenseSimplified BSD, LGPL prior to version 7.3.33

SWI-Prolog is a free implementation of the programming language Prolog, commonly used for teaching and semantic web applications. It has a rich set of features, libraries for constraint logic programming, multithreading, unit testing, GUI, interfacing to Java, ODBC and others, literate programming, a web server, SGML, RDF, RDFS, developer tools (including an IDE with a GUI debugger and GUI profiler), and extensive documentation.

SWI-Prolog runs on Unix, Windows, Macintosh and Linux platforms.

SWI-Prolog has been under continuous development since 1987. Its main author is Jan Wielemaker.

The name SWI is derived from Sociaal-Wetenschappelijke Informatica ("Social Science Informatics"), the former name of the group at the University of Amsterdam, where Wielemaker is employed. The name of this group has changed to HCS (Human-Computer Studies).

Web framework[edit]

SWI-Prolog installs with a web framework based on definite clause grammars.[1]

Distributed computing[edit]

SWI-Prolog queries may be distributed over several servers and web pages through the Pengines system.[2]


XPCE is a platform-independent object-oriented[3] GUI toolkit for SWI-Prolog, Lisp and other interactive and dynamically typed languages. Although XPCE was designed to be language-independent, it has gained popularity mostly with Prolog. The development XPCE graphic toolkit started in 1987, together with SWI-Prolog.

It supports buttons, menus, sliders, tabs and other basic GUI widgets. XPCE is available for all platforms supported by SWI-Prolog.


PceEmacs is a SWI-Prolog builtin editor. PceEmacs is an Emacs clone implemented in Prolog (and XPCE). It supports proper indentation, syntax highlighting, full syntax checking by calling the SWI-Prolog parser, warning for singleton variables and finding predicate definitions based on the source information from the Prolog database.

Interface between Java and Prolog (JPL)[edit]

JPL is a bidirectional interface between Java and Prolog.[4] It requires both SWI-Prolog and Java SDK.[5] It is installed as a part of SWI-Prolog.

Constraint logic programming libraries (CLP)[edit]

Constraint logic programming functionality came rather late in the lifetime of SWI-Prolog, because it lacked the basic support.[6] This changed early in 2004, when attributed variables were added to the language. The Leuven CHR library was then the first CLP library to be ported to SWI-Prolog. We mention SWI-Prolog's INCLP(R) library (De Koninck et al. 2006), which provides non-linear constraints over the reals and was implemented on top of CHR. Later came a port of Christian Holzbaur's CLP(QR) library and a finite-domain CLP(FD) solver. Finally, a boolean CLP(B) solver was added.[7]

See also[edit]


  1. ^ Wielemaker, Jan; Huang, Zhisheng; van der Meij, Lourens (2008). "SWI-Prolog and the Web" (PDF). Theory and Practice of Logic Programming. 8 (3): 363–392. doi:10.1017/S1471068407003237. S2CID 5404048.
  2. ^ Wielemaker, Jan; Lager, Torbjorn (14 May 2014). "Pengines: WebLogic Programming Made Easy". Theory and Practice of Logic Programming. 14 (special issue 4–5): 539–552. arXiv:1405.3953. doi:10.1017/S1471068414000192. S2CID 9949345.
  3. ^ Programming in XPCE/Prolog.
  4. ^ Paul Singleton, Fred Dushin, Jan Wielemaker (February 2004). "JPL: A bidirectional Prolog/Java interface". SWI-Prolog.CS1 maint: uses authors parameter (link)
  5. ^ Paul Singleton (February 2004). "JPL 3.x installation". SWI-Prolog.
  6. ^ Jan Wielemaker, Tom Schrijvers, Markus Triska, Torbjörn Lager: SWI-Prolog. TPLP 12(1–2): 67–96 (2012).
  7. ^ Markus Triska: The Boolean Constraint Solver of SWI-Prolog (System Description). FLOPS 2016: 45–61.

External links[edit]