Here is my program:
reachable(X) :- start(X).
reachable(X) :- link(Y, X), reachable(Y).
start(london).
link(london, paris).
link(paris, london).
link(london, berlin).
link(paris, berlin).
link(berlin, paris).
Now if I query it, I get solutions:
?- reachable(X).
X = london ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
X = paris ;
...
Why does SWI-Prolog keep finding the same solutions?
How can I fix my program to return the set of solutions then halt?
Here's what I am looking for:
?- reachable(X).
X = paris ;
X = london ;
X = berlin ;
No
$ swipl --version
SWI-Prolog version 7.6.4 for amd64