Я кодирую простую программу пролога трассировки маршрутов между разными городами и возвращаю две вещи: расстояние, и если города напрямую связаны. Я был частично отчасти на первом, так как он не возвращается, если города напрямую связаны, но худший случай - это когда невозможно проследить маршрут между городами и программой, вместо того, чтобы просто возвращать ложные падения в бесконечный цикл, и я просто не могу понять, почему.Пролог: Трассировка маршрутов между городами падает в бесконечный цикл
код ниже:
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.
Что я делаю неправильно?
выглядит как опечатка здесь «не (conectas (A, B, _))», «. он должен быть не (соответствует (A, B, _)). и ввести разрез на расстояние (A, B, 0): - A == B,!. чтобы избежать возврата. – Karpak
исправил его, результат по-прежнему «из локального стека». Что происходит? –