Swi-prolog
Note: This is a topic for adding links to useful Prolog information for any one to find.
If you have Trust level: Basic you can add to this list by clicking on the edit icon in the lower right.
SWI Prolog by Jan Wielemaker is probably the most comprehensive Prolog development environment. It has excellent development facilities. It sports a graphical debugging environment and a range of libraries that allow you to implement GUIs, use object-orientation easily implement an http server (or client), TCP/IP sockets and many other functionalities. 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.
Note: Do not reply to this topic; questions, concerns, comments, etc. are to be handled in
Wiki Discussion: Useful Prolog references
References
SWI-Prolog Contributors
SWI-Prolog Getting Started
SWISH - A popular playground for learning SWI-Prolog online. Only requires an internet browser. If you know Jupyter for Python, then think SWISH for SWI-Prolog.
StackOverflow Prolog tag contains links to many Prolog implementations and free Prolog books.
Learn Prolog Now is a popular site for learning Prolog.
SO Documentation - Prolog Language
A test variation of Learn Prolog Now using SWISH.
Notes/Answers created by others using LearnPrologNow on GItHub
SO Documentation for Prolog. - StackOverflow had a documentation facet for tags for a while then discontinued it. The documentation Prolog was moved to
Cheat Sheet
Prolog Cheat Sheet by Musa Al-hassy
Tips for CHR Programming Compiled by Amira Zaki, Thom Fr¨uhwirth, Jon Sneyers
Newsletter (Free)
Books
Online
The Power of Prolog is a great online book (with some video links) explaining prolog from the ground up, including DCGs and Constraint Logic Programming; it is very good.
Simply Logical: Intelligent Reasoning by Example
By George F. Luger (site)
“The Art of Prolog” By Leon S. Sterlingand and Ehud Y. Shapiro (site) (free pdf)
“Prolog and Natural-Language Analysis” by Fernando C. N. Pereira and Stuart M. Shieber (site) (free pdf)
Covingon, Michael (1997). Prolog Programming in Depth (pdf) (source code)
Covingon, Michael (1994) Natural Language Processing for Prolog Programmers (pdf) (source code)
Spivey, Michael (1996) Introduction to Logic Programming Through Prolog (link)
Classics
(Ordered by skill level from beginner to expert)
Prolog Programming for Artificial Intelligence (4th Edition) by Ivan Bratko (WorldCat)
Programming in Prolog by W F Clocksin and C S Mellish (WorldCat)
The Art of Prolog - advanced programming techniques by Leon S Sterling, Ehud Y Shapior and David H D Warren (WorldCat)
The Craft of Prolog by Richard A O`Keefe (WorldCat)
Free
Free Programming Books - Prolog
Non-book resources
Markus Triska’s YouTube channel “The Power of Prolog” which go together with the site “The Power of Prolog”. Starting with “Logical Foundations of Prolog”:
The Stanford Encyclopedia of Philosophy has excellent overview articles:
- …and thereunder Logic Programming
- Visualizing SEP is an interactive visualization and search engine for exploring the Stanford Encyclopedia of Philosophy beautifully and powerfully.
Prolog reference manuals
Often contain useful examples
SWI-Prolog (HTML)
SICStus Prolog (HTML, PDF)
Quintus Prolog (HTML, PDF)
Ciao (HTML)
YAP (HTML)
ECLiPSe (HTML, PDF links on page)
GNU Prolog (HTML, PDF)
Barry’s Prolog (PDF)
IF/Prolog (PDF)
Picat (PDF|HTML)
B-Prolog (PDF)
Logtalk (HTML, other formats)
ProbLog (HTML)
Sites hosting research papers for download
Free
- Microsoft Academic Search AKA MAS
- The open archive HAL
Professional organizations
require membership fee
Sites hosting bibliography
- DBLP - The dblp computer science bibliography provides open bibliographic information on major computer science journals and proceedings.
Searching Internet for research papers - tips
- Add
pdf
as a keyword as it dramatically improves finding the paper if it is indexed by the search engine and avialble as a PDF. - Some times the paper is not indexed by a search engine because the paper is stored on the public site of a professor but robots.txt excludes indexing personal pages. So if you know the author(s), go to their school site, search for the author, find their personal pages and manually search them. This has a low probably of working, but does sometimes work when Google or such fails.
SWI-Prolog predicate documentation
The SWI-Prolog library
Example: append/3
To see the source code for a specific predicate click on (link)
Locating a library with a specific book
WorldCat - If you fill in your location on the page, it will show libraries near you where the book can be found, includes university libraries. Also includes places where you can purchase the book if desired, including out of print and used books.
Swi-prolog Online
Papers
Publications about SWI-Prolog
Unification theory
Intro to Web Prolog for Erlangers
Logical Loops
Use of Prolog for developing a new programming language and A History of the Erlang VM
Negation as failure
Definite Clause Grammars for Language Analysis --A Survey of the Formalism and a Comparison with Augmented Transition Networks
The Computational Power and Complexity of Constraint Handling Rules by Jon Sneyers, Tom Schrijvers, and Bart Demoen
Libraries
SWI-Prolog Built-in Predicates
SWI-Prolog Library
SWI-Prolog Packages
SWI-Prolog Packs
pengines 0.1.8 - A simple python library for interacting with SWI-Prologs Pengines - Note: This is not the more common use of the word Pengines.
Code repositories
RosettaCode has examples of lots of simple programming task implemented in many programming languages. If you know one programming language, you can often find the same implementation in another language. Prolog tasks.
Swi-prolog Dcg
GitHub
Listing of all GitHub repositories with Prolog Code (ref)
Individuals by alphabetical order of last name
GitHub repositories by Wouter Beek
GitHub repositories by Carlo Capelli
GitHub repositories by James Cash
GitHub repositories by Michael Hendricks
GitHub repositories by Raivo Laanemets
GitHub repositories by Peter Ludemann
GitHub repositories by Falco Nogatz
GitHub repositories by Anne Ogborn
GitHub repositories by Fabrizio Riguzzi
GitHub repositories by TeamSPoon
GitHub repositories by Markus Triska
GitHub repositories by Jan Wielemaker
Swi-prolog Editor
GitHub repositories for Blog-Core
GitHub repositories for The Ciao Programming Language
GitHub repositories for Logtalk by Paulo Moura
GitHub repositories for TerminusDB
Art of Prolog Code - The source code from the book “Sterling, Leon, and Ehud Y. Shapiro. The art of Prolog: advanced programming techniques. MIT press, 1994. APA”, by Noah Evans
Brachylog - is a declarative logic programming language much like Prolog. Brachylog is designed to be much terser than Prolog, while retaining some readability, by Julien Cumin
Embeddable λProlog Interpreter by Enrico Tassi
My SWI-Prolog page (GitHub) by Hakan Kjellerstrand
Learn Prolog Now Exercises by Peter Urbak
Prolog by Samer Abdallah
The Prolog GraphPlan Project - The Graphplan algorithm is an automatic planning algorithm that can compute, given a set of rules, a plan of action to go from an initial state to a final state, by Pierre Andrews
Toki Pona Parser - A Tool for Spelling, Grammar Check and Ambiguity Check of Toki Pona Sentences, by jan Lope
Thea2 - A collection of modules for parsing and manipulating OWL2 ontologies in Prolog, by Vangelis Vassiliadis
CMU Prolog Repository - This is some very old Prolog code but sometimes older code is easier to understand.
“Public-domain Prolog library” - Another collection of older Prolog code and libraries (1992-2010), by Jocelyn Ireson-Paine
Katas
Applications making use of Prolog
Pengines - Web Logic Programming made easy
Pharos Static Binary Analysis Framework (GitHub) (YouTube)
Gerrit Code Review - Uses Prolog for rules
PRESS: PRolog Equation Solving System
ConceptBase.cc - A System for Metamodeling and Method Engineering
Swi-prolog Editor
History
Swi-prolog Download
Prolog and Logic Programming Historical Sources Archive - This is a gold mine if you want to see the history of different Prolog implementations with archived code included.
Papers:
- The birth of Prolog by Alain Colmerauer and Philippe Roussel (PDF) (1992)
- History of Logic Programming by Robert Kowalski (page with download link) (2014)
- 1983–1993: The Wonder Years of Sequential Prolog Implementation by Peter Van Roy (page with download link) (1993)
- The Early Years of Logic Programming by Robert Kowalski, (PDF), appeared in “Communications of the ACM” January 1988
IDEs
PceEmacs - SWI-Prolog built-in editor
Prolog Development Tools (ProDT) for the Eclipse IDE
SPIDER, the SICStus Prolog IDE based on Eclipse
Logtalk plugin for IntelliJ IDEA
Howto guides/Tutorial
By Anne Ogborn
By Robert Laing
The above are notes from developing a chess player at http://www.newsgames.biz/chess and a draughts player at http://www.newsgames.biz/draughts which are still work in progress, so the guides are also improving gradually.
SWI-Prolog Discourse categories
Algorithms
Dictionary of Algorithms and Data Structures
The Stony Brook Algorithm Repository
StackOverflow tag Language Agnostic - Contains Free Language Agnostic Programming Books
Other
SWI Prolog Tutorial
By now it goes without saying, but I'll say it anyhow: This is a environment tutorial, not a language tutorial. For language documentation please see:
The tutorial is divided into three section listed below.
- Getting Started - finding and running SWI prolog
- Getting Help - using SWI's built in help
- Running a simple program - loading, running and debugging a simple program
SWI-Prolog is located on orcas and sanjuan in the following directory:
/cse/courses/misc_lang/axp/prolog/bin/pl
To avoid typing the directory every time, just add the following line to your .mycshrc file in your home directory:
set path = ($path /cse/courses/misc_lang/axp/prolog/bin)
and just type pl from anywhere to run SWI Prolog. If you wish to run SWI prolog from home the source code is available from the SWI-Prolog site at:
http://www.hio.hen.nl/faq/SWI-Prolog.html
Getting Help
You should see the following text when you run SWI-Prolog.
Getting help is easy thanks to the built in features in SWI-Prolog. As suggested by the startup screen, SWI-Prolog has a built in manual, which can be searched using help(<topic you need help on>). Just like in unix, you can search for a keyword using apropos(<some word>) To view the top level help menu simply type:
1 ?- help.
Make sure to include the PERIOD ('.'). The period tells prolog to interpret what you have written and not wait for any further input. Some more (relevant) examples of help:
2 ?- help(3). - shows the third section of the manual **note that typing 'q' returns you to the command prompt**
3 ?- help(;). - the continue operator
4 ?- apropos(trace). - lists key words associated with the trace function
Sample Prolog Interaction
Welcome to the comically complex sample of prolog. The sample interaction is motivated by the movie The Stupids. I suggest that none of you waste your time watching this movie. This single highlight of this movie is the 'I'm my own grandpa' song, whose lyrics can be viewed here.
Like Haskell you are unable to write rules directly at the command line. They must be loaded from a file using the consult command. Our sample file is called grandpa.pl, and should be saved locally. Once you have a copy of grandpa.pl start SGI Prolog and load the file by typing:
1 ?- consult('grandpa.pl').
You may also type ['grandpa.pl'] or just [grandpa] (because pl is the default file name.
NOTE: if you have a file named grandpa, and and file named grandpa.pl [grandpa] will load grandpa.pl. Look up help(consult) for further details.
Now all the definitions have been loaded you may further investigate the lineage of Stanley Stupid. In grandpa.pl are rules defining what the various relations are and facts about the Stupid Family. There is also another copy of the lyrics, with notes in the margins with the names we choose for characters. Type:
1 ?- married(father_stupid, X).
It will display the first value of X (a variable because it is capital) that satisfies the predicate married. To view more matching results use the ; key.
Experiment with the trace and spy functions, which allow you to follow prologs logic as it progresses through the rules. For complicated interactions you will see numbers appearing in the place of the variable names, these are values that the prolog uses when trying to find a match to the rules. Type:
1 ?- trace(grandparent). trace(step_parent).
Now you have turned on tracing for these two rules. To test if Stanley really is his own grandfather type:
2 ?- grandfather(stan_stupid, stan_stupid).
Now experiment with the different relations. Try:
1 ?- uncle(X, Y).
If there is circular logic then you can get the same answers over and over again. For now just use <control-c> to bring up the debugging menu and type a to abort. To exit the environment type:
1 ?- halt.
Have Fun. **Bonus points will be awarded to those who memorize the song.
** No bonus points will actually be awarded.