I'm coding a simple Prolog program of tracing routes between different cities and returnig two things: distance, and if the cities are directly connected. I succeded partially on the first one, since it does not return if the cities are directly connected, but the worse case is when it's not possible to trace a route between the cities, and the program, instead of simply returning false falls into an infinite loop, and I just can't understand why.
The code is below:
road (city1, city2, distance).
road(campinas,valinhos,16.9).
road(campinas,paulinia,30.1).
road(campinas,hortolandia,27.6).
road(campinas,holambra,41.1).
road(valinhos,vinhedo,7.8).
road(paulinia,cosmopolis,18.5).
road(hortolandia,sumare,9.1).
road(holambra,santo_antonio_de_posse,16.7).
road(vinhedo,louveira,11.2).
road(sumare,americana,12.3).
road(sumare,santa_barbara_doeste,29.8).
road(louveira,jundiai,12.9).
road(americana,limeira,27.6).
road(limeira,cordeiropolis,14.9).
road(santa_barbara_doeste,piracicaba,28.0).
road(cordeiropolis,araras,21.4).
conects(A,B,D):-road(A,B,D).
conects(A,B,D):-road(B,A,D).
distance(A,B,0):- A == B!.
distance(A,B,D):- conects(A, B, D).
distance(A,B,D):- distance(B1,B,D2), conects(A,B1,D1), not(conects(A,B,_)), D is D1 + D2.
What am I doing wrong?
out of local stack. What's happening? - Josh C