2

有这样的情况:我在 Prolog 的特定线路上宣布了伦敦地铁的一小部分。我有 3 条线路,有几个车站,它们之间都有共同点。

地下地图

我有关于车站的事实,其中争论是彼此相邻的车站以及它们所在的线路。地图上有完整的车站列表:

neighbour(south_kensington,victoria,green).
neighbour(victoria,westminster,green).
neighbour(westminster,embankment,green).
neighbour(embankment,blackfriars,green).
neighbour(vauxhall,victoria,blue).
neighbour(victoria,green_park,blue).
neighbour(green_park,oxford_circus,blue).
neighbour(oxford_circus,warren_street,blue).
neighbour(warren_street,euston,blue).
neighbour(warren_street,tottenham_court_road,black).
neighbour(tottenham_court_road,leichester_square,black).
neighbour(leichester_square,charing_cross,black).
neighbour(charing_cross,embankbent,black).
neighbour(embankment,waterloo,black).

问题是:我想从 A 到 B(它们在不同的线路上),Prolog 先生应该说我应该在哪个站换线。例如: A:查令十字;B:威斯敏斯特;变化:路堤

4

1 回答 1

2

问题的陈述并不完全清楚。您是在寻找仅进行一次更改的路线,还是可以进行任意数量的更改。

1)考虑从沃克斯豪尔到滑铁卢的地铁部分。有一条经过威斯敏斯特的路线有两个变化,一条经过沃伦街的路线只有一个变化。两种路线都可以接受还是只接受其中一种?

2) 更正邻居Embankment station 名称中的错字(charing_cross,embankbent,black)。

3) 定义一个谓词 station_on_line(St,Li) 当且仅当站点 St 位于线路 Li 上时成立,并检查对于查询station_on_line(St,blue)它是否只返回每个站点一次,并且同样station_on_line(victoria,Li)返回每条线路 Victoria station 仅运行一次。

4) 定义一个谓词change_at(L1,L2,C),如果 linesL1L2meet at the station则成立C

5) 情况 3) 和 4) 将足以找到一个站点进行更改,如果只允许一个变化,即从 Vauxhall 经威斯敏斯特到滑铁卢的路径在 1) 中是不允许的。

6) 设计一个递归定义,让您找到一条通过任意数量线路的网络上任意数量站点的路径。

于 2012-05-06T05:36:21.540 回答