Sitemap

Easy Prolog installation on Windows, Linux, macOS

3 min readJan 14, 2020
Press enter or click to view image in full size

Installing SWI Prolog with its web UI and running some test code. This system is functionally similar to how Jupyter Notebook runs, except with Prolog.

Install Docker

Install Docker (requires a free account). This installation is a standalone on Windows and macOS, but requires the command line on Linux:

Pull the Prolog image

docker pull swipl/swish

We only need to pull this once. This version includes the web interface!

Run the image

docker run -it -p 3050:3050 --name prolog swipl/swish

Anytime we want to work in Prolog, we run the above. We can then access the web GUI by pointing our browser to http://localhost:3050

Press enter or click to view image in full size
Prolog Web Interface

A Sample Program

Click on Create a Program here. The interface changes to a program on the left, and the query box on the right.

If we clicked on Create a Notebook here instead, the prolog interface would resemble Jupyter Notebook, and let us run cells of code individually (similar to Jupyter Notebook for Python).

In the left, program section, type:

loves(vincent, mia).
loves(marcellus, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).
jealous(X, Y) :-
loves(X, Z),
loves(Y, Z).

This sets up the logic and axioms of our program. In the right, query section, type:

loves(X, mia).

and hit Run. This query asks, who loves Mia? From up top, we see that it’s Vincent and Marcellus. Our output follows:

Press enter or click to view image in full size
Who loves Mia?

Here we only see Vincent. To see the rest, click the next button:

Press enter or click to view image in full size
Clicking next shows the rest of the output

For a different query, run:

jealous(X,Y).

Click through next (or the numbers) to reveal the entire output:

Press enter or click to view image in full size
A love dodecahedron

The final window looks like so:

Press enter or click to view image in full size
Output for both queries

Note that Prolog is case-sensitive, so if we define X with a capital, we need to use a capital in the query.

In addition, we can still run Prolog from the command line:

Press enter or click to view image in full size
Prolog in the CLI

Stopping the server

The Prolog server stays open until we exit it with Control+C twice in the command line.

List of errors and fixes

docker: Error response from daemon: driver failed programming external connectivity on endpoint …: Bind for 0.0.0.0:3050 failed: port is already allocated.

Prolog is still running the server. You can access it at http://localhost:3050.

If you want to stop Prolog but closed the window and can’t use the Control+C method, here’s some options:

This command will stop all Docker containers:

docker rm -f $(docker ps -a -q)

If you want to close a single container, use:

docker container ls

to display all running containers. Take note of the Container ID, then run

docker stop CONTAINERID
Press enter or click to view image in full size
Stopping a container. Note that we only need the first character(s) of the container ID

--

--

No responses yet