SWI-Prolog is a versatile implementation of the Prolog language. Although SWI-Prolog gained its popularity primarily in education, its development is mostly driven by the needs for application development. This is facilitated by a rich interface to other IT components by supporting many document types and (network) protocols as well as a comprehensive low-level interface to C that is the basis for high-level interfaces to C++, Java (bundled), C#, Python, etc (externally available)...
Data type extensions such as dicts and strings as well as full support for Unicode and unbounded integers simplify smooth exchange of data with other components.
SWI-Prolog aims at scalability. Its robust support for multi-threading exploits multi-core hardware efficiently and simplifies embedding in concurrent applications. Its Just In Time Indexing (JITI) provides transparent and efficient support for predicates with millions of clauses.
SWI-Prolog unifies many extensions of the core language that have been developed in the Prolog community such as tabling, constraints, global variables, destructive assignment, delimited continuations and interactors.
SWI-Prolog offers a variety of development tools, most of which may be combined at will. The native system provides an editor written in Prolog that is a close clone of Emacs. It provides semantic highlighting based on real time analysis of the code by the Prolog system itself.
SWI-Prolog provides an add-on distribution and installation mechanism called packs. A pack is a directory with minimal organizational conventions and a control file that describes the origin, version, dependencies and automatic upgrade support.
Prolog as unifying language:
Although Prolog is widely recognised as a special purpose language for tasks such as rule evaluation it is considered primarily as a platform that is suitable to be used as glue between various components...
Robust and free of memory leaks.
Scales well for large applications.
Just-In-Time indexing of both static and dynamic code on any argument greatly simplifies handling multi-moded relations with many clauses.
Unbounded integer and rational number arithmetic based on GMP library.
The goodies: modules (upward compatible to Quintus and SICStus), garbage-collection (transparent to C/C++-code, including atom and clause garbage collection), last-call optimisation, dynamic expansion of the runtime stacks, exception-handling (including C/C++ interface for both catching and throwing exceptions).
Attributed variables, coroutining (freeze/2, when/2, dif/2), global variables, cyclic terms.
Flag-controlled handling of occurs-check (false/true/error)...
UNICODE character set handling internal.
Engines, also known as interactors provide coroutines that can be used for state accumulation and massive concurrency for e.g., swarm intelligence and simulations.
Delimited continuations is a powerful building block for new control structures and realise aspect programming.
Tabling (SLG resolution) provides a more robust resolution technique for solving queries over complex interrelated rules with guaranteed termination.
Following XSB, the 8.1.x development series provide well founded semantics for negation as well as incremental tabling to automatically update affected tabling with a changing knowledge base.
For windows 32 bit:
Size: 12.59 MB - Download
For windows 64 bit:
Size: 12.55 MB - Download