Prologプログラムを介して小都市NZをリンクする際に問題があります。私は道路、その出入り口、および距離である一連のデータを与えられています。私は最初の問題はまっすぐになると思ったが、私は幸運にもこれで何時間も私の髪を引っ張ってきた。私がしなければならないのは、ルートを考えれば実現可能な道をプリントアウトすることだけだった。なぜソリューションは正しいパスを見つけることができないのですか?Prologグラフが経路を見つけられない
road('Wellington', 'Palmerston North', '143').
road('Palmerston North', 'Wanganui', '74').
road('Palmerston North', 'Napier', '178').
road('Palmerston North', 'Taupo', '259').
road('Wanganui', 'Taupo', '231').
road('Wanganui', 'New Plymouth', '163').
road('Wanganui', 'Napier', '252').
road('Napier', 'Taupo', '147').
road('Napier', 'Gisborne', '215').
road('New Plymouth', 'Hamilton', '242').
road('New Plymouth', 'Taupo', '289').
road('Taupo', 'Hamilton', '153').
road('Taupo', 'Rotorua', '82').
road('Taupo', 'Gisborne', '334').
road('Gisborne', 'Rotorua', '291').
road('Rotorua', 'Hamilton', '109').
road('Hamilton', 'Auckland', '126').
route(Current, Finish, []) :- route(Current, Finish, [Current]).
route(Current, Finish, _) :- Current==Finish.
route(Current, Finish, Visits) :- traverse(Current, Next, Visits), route(Next, Finish, Visits).
traverse(Current, Next, [Next|_]) :- road(Current, Next, _).
私が呼ぶたび:route('Wellington','Napier', X).
それはパス、Wellington->パーマストンノース - >ネイピアそこにいるにもかかわらず、失敗しました。事前に感謝します、私はおそらく私がPrologを初めて使っているので、何かばかげたことをしていることを知っています。
恐ろしい感謝を使って、異なる都市とのパスのみを受け入れる
:あなたが書くことができ、これを解決するために それを明確にするために、私はそれを思慮深くする傾向があります。私がそこにいると信じている接続の片方向のことを指摘してくれてありがとうございます。それらを結びつけるもう2つのルールを必要とする2通りの方法があります。 – SHolmes
道路が2通りあるときに役立ちました。私の答えを編集します。 – coder