如何在Prolog的地图的两个点之间找到公共电台?

时间:2012-05-05 06:47:47

标签: prolog

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

The map of the underground

我有站点的事实,其中参数是彼此相邻的站点以及它们所在的行。地图上有完整的电台列表:

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:Charing Cross; B:威斯敏斯特;更改为:堤岸

1 个答案:

答案 0 :(得分:2)

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

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

2)更正以堤防站名义的拼写错误     邻居(charing_cross,embankbent,黑色)。

3)定义一个谓词station_on_line(St,Li),当且仅当一个站点St在一条线路Li上并且检查一个查询station_on_line(St,blue)它是否正好返回每个站一次,同样station_on_line(victoria,Li) 1}}只返回维多利亚站的每一行。

4)如果行change_at(L1,L2,C)L1在电台L2相遇,则定义一个谓词C

5)案例3)和4)足以找到一个改变的站点,如果只允许一个改变,即1)中不允许通过威斯敏斯特从沃克斯豪尔到滑铁卢的路径。

6)设计递归定义,让您通过任意行数找到通过任意数量的站点的路径。