Prolog is the classic language of "database inference," where you collect a set of facts into a "database," add rules indicating how they interact, and what implications may be taken from the facts, and then construct queries about things you might want to know.
Obvious applications would include describing a family tree:
First, there are a set of facts indicating who is the father of whom.
Then you would have rules, such as:
Finally, a query might be run, such as:
?- uncle(A, B). A = betty B = bradley ; A = betty B = chris ; A = betty B = david ; A = betty B = douglas ; A = bradley B = jonathan ; A = chris B = jonathan ; A = douglas B = jonathan ; |
The name "betty" is seldom associated with "uncles;" the rule apparently was not specific enough as it should have indicated that an uncle needs to be male.
Unfortunately, the "declarative" nature of the
syntax of Prolog makes it a real pain to write
"procedural" code in the language. That has proven a
daunting challenge discouraging wider spread use of Prolog. The
PyProlog
interface provides an interesting
option where one might write "interface" code in a language with more
conventional semantics, like Python ,
but process complex logic using Prolog semantics.
That being said, the rule/inference orientation of Prolog makes it perfect for applications such as inferring results about taxation. I have implemented a Canadian Income Tax Calculator in Prolog.
Jocelyn Paine presented Why Use Prolog? in reply to why she ditched Java in favor of Prolog for her spreadsheet analysis tool, Model Master.
The Art of Prolog - 2nd Edition : Advanced Programming Techniques
Visual Prolog - Prolog Development Center
This system was once sold by Borland as their "Turbo Prolog" environment.
GNU Prolog - a Prolog Compiler
A particularly interesting aspect of GNU Prolog is that it includes support for finite domains. The idea of this is that it introduces variables that can only take finite integer ranges as their domains. The domain is reduced as constraints are introduced. This can substantially speed solution searches when it reduces the scope of a search, diminishing the number of combinations needing to be searched.
Building Expert Systems in Prolog
Online version of a book published by Springer-Verlag.
Schelog - A Schemely variation on Prolog
A library providing constraint programming and search for Java
![]() | There is apparently other software by the name JACK, so they are looking at a name change to JCK. Hopefully this won't also lead to all the men in the world that have that name receiving the demand that they change their name as well... |
A shell programming system that uses logic programming, behaving as a hybrid of either Tcl or sh with Prolog.
XSB - a tabled logic programming and deductive database system
A Portuguese Prolog implementation available under a Perl-style Artistic license.
Ciao Prolog
A Spanish Prolog implementation supporting ISO-Prolog but with a modular design allowing restrictions and extensions. It is a fairly rich environment with extensions for handling graphics, TCP/IP, and more. Can compile to either bytecode or compilable C sources.
A SWIG wrapper for GNU Prolog, allowing embedding access to Prolog code inside Python applications.
There is even a PalmOS port
A Japanese Prolog implementation that is compatible with Edinburgh and ISO Prolog dialects.
An Open Source object-oriented extension to Prolog. Combining logic programming with OO and event-driven programming, it is compatible with most Prolog compilers.
The Eriksson langage Erlang has a base syntax very similar to that of Prolog.
ConceptBase is a multi-user deductive object manager. It supports clients written in such languages as C, Java , Tcl, and Prolog . It uses a language called Telos to represent sets of interrelated propositions. It's a bit like an "object oriented Prolog."
A now Open Source system produced by Eriksson for building telecommunication systems. This language is unique in the functional community in that it is in use in industry for large scale software projects.
It is essentially like a non-backtracking Section 10, which has the practical consequences that, since there are no variables, only bindings, and therefore code may be guaranteed to be functionally independent, there is the result that it is trivially safe to run code in parallel. The common shape of Erlang systems is as hordes of threads. Unlike in C, this isn't dangerous, as the functional nature of the language allows this to be perfectly safe to do.
University of Montreal project that turns Erlang source into Gambit Scheme code that is supposedly rather efficient...