首页 文章

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

提问于
浏览
2

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

The map of the underground

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

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 回答

  • 2

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

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

    2)纠正邻居堤防站名称的拼写错误(charing_cross,embankbent,black) .

    3)定义一个谓词station_on_line(St,Li),当且仅当一个站点St在一条线路Li上并且检查一个查询 station_on_line(St,blue) 时它才返回每个站点一次,同样 station_on_line(victoria,Li) 返回维多利亚站点所在的每一行一旦 .

    4)定义一个谓词 change_at(L1,L2,C) ,如果行 L1L2 在站 C 处相遇,则该谓词保持为真 .

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

    6)设计递归定义,使您可以在具有任意行数的网络上找到通过任意数量的站的路径 .

相关问题