Unification—
and backtracking predicates.
Throughout the seasons.
About Prolog
Prolog is a programming language that is rooted in
classical logic. It
supports search and unification as built-in
features. Prolog allows us to elegantly solve many tasks
with short and general programs.
Prolog has a pure monotonic
core. The following documents are centered around this important
aspect of Prolog, allowing declarative
debugging and many other approaches that are impossible or
only rudimentarily developed in other programming languages.
A Prolog program consists of predicates. Each Prolog
predicate defines a relation between its arguments. A
relation is a generalization of a function. Prolog
predicates are often more versatile than functions in other
programming languages, and are typically usable in
multiple directions.
Prolog has several
facets that distinguish it from many
other programming languages. In addition, the language has
undergone significant developments in the last few decades.
The increasing availability of more declarative features allows us
to present the language in a more uniform way that is easier to
understand and at the same time yields more general programs with
less effort than was the case with early Prolog versions.
The goal of this material is to bridge the gap between
the great traditional Prolog textbooks of the past and the
language as it currently is, several decades after these
books were written. You will see that many limitations of the
past are no longer relevant, while several new constructs are now
of great importance even though they are not yet covered in any
available Prolog book. If you are new to Prolog, read the
chapters in order for a self-contained exposition of many
important language features. If you already have some experience
with Prolog and would like to learn more about more recent
aspects, I recommend you start with the chapter on
integer arithmetic and proceed with the
chapters it links to.
You can use PceProlog to configure Emacs
for Prolog programming.
About you
You are currently learning or teaching Prolog and find the
existing literature somewhat unsatisfying. Is Prolog still the
same language it was decades ago? Are the existing books
still applicable? If not, what does modern Prolog code
look like?
You can sense that Prolog is a powerful language, yet you are
currently unable to use it to its fullest potential.
In fact, it sometimes seems too limited to you to solve
real problems. On the other hand, you know that Prolog is
the most widely used logic programming language. How can
this be?
Parts of the presented material seem new and unusual
to you, and even contradict what others tell you
about Prolog. In such cases, it is only natural to ask how
legitimate the material is. Can you rely on what the author
is saying?
In 2008, I received a Master's degree from the Vienna University
of Technology after solving a combinatorial optimization
task called the Social Golfer
Problem.
In 2014, I received a doctoral degree from the Vienna University
of Technology in the area of Prolog and constraints. You can
read my thesis. Also since 2014,
my CLP(B) solver
ships with SWI-Prolog. More recently, I have worked
on library(ssl).
My last major contribution to SWI-Prolog
is library(crypto).
Since 2016, I am developing my constraint libraries with Scryer
Prolog and SICStus Prolog as the primary target systems.
See CLP(ℤ), and the
SICStus port of CLP(B) for more
information. As of April 2020, Scryer Prolog ships with these
libraries as built-in features. Other libraries I contributed to
Scryer Prolog
include library(crypto)
and library(format). As of November 2020,
library(format) also ships
with Tau Prolog and
Trealla Prolog.
I am author and co-author of
several scientific publications
about combinatorial optimization, Prolog and constraints. I am
mentioned as one of the contributors to the Prolog teaching
environment GUPU
and have contributed to the Prolog
ISO standard (N226).