私は単純な地下鉄輸送システムを示す win-prolog ファイルを作成しようとしています。これらは、can_go/2 ファクトを使用して、以下に示すように実行しているファクトです。
can_go(kajang,staduimkajang).
can_go(stadiumkajang,sungaijernih).
can_go(sungaijernih,bukitdukung).
can_go(bukitdukung,batucheras).
can_go(batucheras,bandartunhusseinonn).
can_go(bandartunhusseinonn,sriraya).
can_go(sriraya,tamansuntex).
can_go(tamansuntex,tamanconnaught).
can_go(tamanconnaught,tamanmutiara).
can_go(tamanmutiara,tamanmidah).
can_go(tamanmidah,tamanpertama).
can_go(tamanpertama,maluri).
can_go(maluri,cochrane).
can_go(cochrane,tunrazakexchange).
can_go(tunrazakexchange,bukitbintang).
can_go(bukitbintang,merdeka).
can_go(merdeka,pasarseni).
can_go(pasarseni,muziumnegara).
can_go(muziumnegara,semantan).
can_go(semantan,pusatbandardamansara).
can_go(pusatbandardamansara,phileodamansara).
can_go(phileodamansara,ttdi).
can_go(ttdi,bandarutama).
can_go(bandarutama,mutiaradamansara).
can_go(mutiaradamansara,surian).
can_go(surian,kotadamansara).
can_go(kotadamansara,kwasasentral).
can_go(kwasasentral,kwasadamansara).
can_go(kwasadamansara,kampungselamat).
can_go(kampungselamat,sungaibuloh).
これらは、再帰規則に基づいて、以下のように作成した規則です。
list:-
can_go(X,Y),
write(X),write(' -> '),write(Y),nl,
fail.
route:-
can_go(X,T),
can_go(T,T2),
can_go(T2,T3),
can_go(T3,T4),
can_go(T4,T5),
can_go(T5,T6),
can_go(T6,T7),
can_go(T7,T8),
can_go(T8,T9),
can_go(T9,T10),
can_go(T10,T11),
can_go(T11,T12),
can_go(T12,T13),
can_go(T13,T14),
can_go(T14,T15),
can_go(T15,T16),
can_go(T16,T17),
can_go(T17,T18),
can_go(T18,T19),
can_go(T19,T20),
can_go(T20,T21),
can_go(T21,T22),
can_go(T22,T23),
can_go(T23,T24),
can_go(T24,T25),
can_go(T25,T26),
can_go(T26,T27),
can_go(T27,T28),
can_go(T28,Y),
write(X),write(' -> '),write(Y),nl,
fail.
list
事実に基づいてすべてのステーションを表示できますが、route
出力は次のように表示されます。
stadiumkajang -> sungaibuloh
では、それを示したい場合はどうすればよいでしょうか
kajang -> sungaibuloh
運賃と距離を表示したい場合 (2 つの駅間の運賃と距離が同じで、それぞれ $1.50 と 10 km であると仮定します)、結果を得るために再帰的な方法に従う必要がありますか?