0

私は単純な地下鉄輸送システムを示す 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 であると仮定します)、結果を得るために再帰的な方法に従う必要がありますか?

4

0 に答える 0