Easy Prolog installation on Windows, Linux, macOS
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
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:
Here we only see Vincent. To see the rest, click the next button:
For a different query, run:
jealous(X,Y).
Click through next (or the numbers) to reveal the entire output:
The final window looks like so:
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:
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