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.

对于listI 可以根据事实显示所有站点,但对于route输出显示如下:

stadiumkajang -> sungaibuloh

那么,如果我想证明这一点,我应该怎么做

kajang -> sungaibuloh

如果我想说明票价和距离(假设两个车站之间的票价和距离相同,分别为$ 1.50和10公里),我应该按照递归方法获得结果吗?

4

0 回答 0