私は、異なる都市間のルートをトレースし、距離を計算し、都市が直接接続されているかどうかを調べる簡単なPrologプログラムをコーディングしています。 都市が直接接続されていても返ってこないので、最初の部分は部分的に成功しましたが、都市とプログラムの間のルートをトレースすることはできません。無限ループ、私はちょうど理由を理解できません。Prolog:都市間のルートの追跡は無限ループになります
コードは以下の通りです:
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.
私が間違って何をしているのですか?
ここには「not(conectas(A、B、_))」の入力ミスがあるようです。 (conects(A、B、_))でなければならない。距離(A、B、0)のカットを導入する:-A == B、!バックトラッキングを回避します。 – Karpak
がそれを修正しても、結果はまだ「ローカルスタック外」です。何が起こっていますか? –