Category Archives: Prolog

Prolog

To start using SWI-Prolog under Linux you need to have it installed. Fortunately, SWI-Prolog is a standard package in every reasonable Linux distribution.

In Ubuntu, you can use the Synaptic Package Manager to check (if unsure) or install (if not performed yet) the SWI-Prolog.

In order to start using Prolog follow the simplest recipe:

  • Make a directory to store your Prolog programs, for example /home/username/prolog/
  • Create an empty text file with a name of your choice and extension .pl in this directory; for example socrates.pl. You can use any ASCII text editor of your preference (e.g. vi, vim, gedit, emacs).

The above steps may look as follows:

ali@ali:~/ALI/PROLOG$ mkdir prolog
ali@ali:~/ALI/PROLOG$ cd prolog
ali@ali:~/ALI/PROLOG/prolog$ gedit socrates.pl
  • Edit your first program with use of the editor. The program may be as follows:
man(plato).
man(socrates).

mortal(X):- man(X).
  • Open a shell window and go to the directory where you store your Prolog programs (e.g. /home/username/prolog/).
  • Start the Prolog interpreter/compiler. In most cases you just write prolog, or swipl. The prompt changes to ?-. Disappointed? No graphical environment? Do not worry. Intelligent people quickly get used to this modest environment and appreciate the ideas behind Prolog.
  • Now you have to load your program. This can be done by typing [programname]. command in the shell window. Rememebr that the name is not followed by .pl and after the closing bracket there must be a full stop. For example type [socrates]
  • In case there are no errors you can start using the program by asking questions. You just type a predicate name (one appearing in the program) with the appropriate number of arguments in parentheses; the arguments must be separated by commas. Remember to always add full stop.

The above steps may look like:

ali@ali:~/ALI/PROLOG/prolog$ prolog
Welcome to SWI-Prolog (Multi-threaded, Version 5.6.14)
Copyright (c) 1990-2006 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- [socrates].
% socrates compiled 0.00 sec, 864 bytes
Yes

?- 
  • If you expect more than one answer, use the colon (;) to produce them.

This may look like:

?- man(socrates).
Yes

?- man(X).
X = plato ;
X = socrates ;
No

?- mortal(socrates).
Yes

?- mortal(X).
X = plato ;
X = socrates ;
No

?- 

Names like socrates, i.e. ones starting with a lower case letter are constants (proper names); variable names starts with an upper case letter. Both of them are parameters of predicates (relations) such as man or mortal. Every fact (a simple statement) such as man(socrates). is followed by a full stop. Every clause such as mortal(X):- man(X). represents and inference rule and is also followed by a full stop.

You can modify your program with the editor. After saving it always re-load it.

*To stop the Prolog interpreter/compiler type in the halt. command.

To obtain help you may type in one of the following commands:

?- help.
    Explain the basics of the help system. 

?- help(topic).
    Show help-page on the specified topic. 

?- apropos(string).
    Show all topics holding `string' in their summary documentation.

Have a fun by modifying the program and asking more and more complex questions!