The following Comparison of Prolog implementations provides a reference for the relative feature sets and performance of different implementations of the Prolog computer programming language. A comprehensive discussion of the most significant Prolog systems is presented in an article published in the 50-years of Prolog anniversary issue of the journal Theory and Practice of Logic Programming (TPLP).
There are Prolog implementations that are radically different, with different syntax and different semantics (e.g. Visual Prolog)[1] and sub-communities have developed around different implementations.[1]
Code that strictly conforms to the ISO-Prolog core language is portable across ISO-compliant implementations. However, the ISO standard for modules is an extension which was not fully adopted in most Prolog systems.[1]
Factors that can adversely affect portability include: use of bounded vs. unbounded integer arithmetic, additional types such as string objects, advanced numeric types (rationals, complex), feature extensions such as Unicode, threads, and tabling.[2] Use of libraries unavailable in other implementations and library organisation:[1]
Currently, the way predicates are spread over the libraries and system built-ins differs enormously. [...] Fortunately, there are only few cases where we find predicates with the same name but different semantics (e.g. delete/3
)
Platform | Features | Toolkit | Prolog Mechanics | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Name | OS | Licence | Syntax | |||||||||||||
AllegroProlog | Unix, Windows, Mac OS X | (limited free edition available) | , via Lisp | , via Lisp | , via Lisp | , via Lisp | S-expressions. Full Common Lisp integration. | |||||||||
BProlog | Unix, Windows, Mac OS X | (free for non-commercial uses) | ISO-Prolog, plus event-handling, CLP(FD), and tabling | |||||||||||||
Ciao | Unix, Windows, Mac OS X | ISO-Prolog, plus extensions | ||||||||||||||
DOS-Prolog[3] | MS-DOS | Edinburgh Prolog | ||||||||||||||
ECLiPSe | Linux, Windows, Solaris, macOS | Extended Prolog, Multi-dialect, including ISO | ||||||||||||||
GNU Prolog | Unix, Windows, Mac OS X | ISO-Prolog | ||||||||||||||
JIProlog | JVM, Android | via Java | via Java | ISO-Prolog | ||||||||||||
JLog[4] | JVM | ISO-Prolog | ||||||||||||||
JScriptLog | Web Browser | ISO-Prolog | ||||||||||||||
jTrolog[5] | JVM | ISO-Prolog | ||||||||||||||
WIN-Prolog[6] | Windows | Edinburgh Prolog with extensions | ||||||||||||||
Open Prolog | Mac OS | |||||||||||||||
Poplog Prolog | Only through POP-11, on Linux | Edinburgh Prolog, with interfaces to Poplog Common Lisp and Pop-11 | ||||||||||||||
Scryer Prolog | Linux, Windows, macOS | ISO-Prolog | ||||||||||||||
class="table-rh" | SICStus Prolog | Unix, Linux, Windows, macOS | ISO-Prolog | |||||||||||||
Strawberry Prolog | Windows, Unix | Not ISO-Prolog + extensions | ||||||||||||||
SWI-Prolog | Unix, Linux, Windows, macOS | ISO-Prolog, Edinburgh Prolog | ||||||||||||||
tuProlog | JVM, Android | ISO-Prolog | ||||||||||||||
Visual Prolog | Windows | |||||||||||||||
XSB Prolog | Linux, Windows, Solaris, macOS | ISO-Prolog, tabled WFS | ||||||||||||||
YAP-Prolog | Linux, Windows, Solaris, Mac OS X, HP-UX | Edinburgh, ISO-Prolog, Quintus and SICStus Prolog compatible |
OS-related | Web-related | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Name | Conditional compilation | Sockets | Multi-threading | Tabling | HTTP client | HTTP server | HTML Parser | RDF Triple store | ||
BProlog | ||||||||||
Ciao | ||||||||||
ECLiPSe | ||||||||||
GNU Prolog | ||||||||||
WIN-Prolog | ||||||||||
Scryer Prolog | ||||||||||
SICStus Prolog | ||||||||||
SWI-Prolog | ||||||||||
Visual Prolog | ||||||||||
XSB | ||||||||||
YAP-Prolog |
Name | Type checker | Determinacy checker | Call-pattern checker | ||
---|---|---|---|---|---|
Ciao | |||||
GNU Prolog | |||||
SICStus Prolog | |||||
SWI-Prolog | |||||
Visual Prolog | |||||
XSB | |||||
YAP-Prolog |
Name | Tail-Call Optimization | Choice Point Elimination | Environment Trimming | Just-in-Time Indexing | ||
---|---|---|---|---|---|---|
Ciao | ||||||
ECLiPSe | ||||||
GNU Prolog | ||||||
SICStus Prolog | ||||||
SWI-Prolog | ||||||
Visual Prolog | ||||||
XSB | ||||||
YAP-Prolog |
Name | Version | Date | ||
---|---|---|---|---|
class="table-rh" | AllegroProlog | 1.1.2 | 2018-12-12 | |
class="table-rh" | BProlog | 8.1 | 2014-02-23 | |
class="table-rh" | JIProlog | 4.1.7.1 | 2021-08-26 | |
class="table-rh" | Ciao | 1.22 | 2022-09-28 | |
class="table-rh" | DOS-Prolog | 8.0 | ||
class="table-rh" | ECLiPSe | 7.1 | 2023-01-01 | |
class="table-rh" | GNU Prolog | 1.5.0 | 2023-02-21 | |
class="table-rh" | JLog | 1.3.6 | 2007-09-13 | |
class="table-rh" | JScriptLog | 0.7.5 beta | 2007-09-10 | |
class="table-rh" | jTrolog | |||
class="table-rh" | WIN-Prolog | 8.0 | 2022-07-14 | |
class="table-rh" | Open Prolog | |||
class="table-rh" | Poplog Prolog | V16 | 2020-01-06 | |
class="table-rh" | Scryer Prolog | 0.9.3 | 2023-11-02 | |
class="table-rh" | SICStus Prolog | 4.9.0 | 2023-12-18 | |
class="table-rh" | Strawberry Prolog | 6.1 | 2023-08-23 | |
class="table-rh" | SWI-Prolog | 9.1.18 | 2023-11-01 | |
class="table-rh" | tuProlog | 2P-Kt 0.31.18 | 2023-10-24 | |
class="table-rh" | Visual Prolog | 10, Build 1000 | 2021-04-15 | |
class="table-rh" | XSB Prolog | 5.0 | 2022-05-15 | |
class="table-rh" | YAProlog | 7.1.0 | 2020-12-19 |