2012-05-05 2 views
2

Есть такая ситуация: у меня есть небольшая часть лондонского подполья, провозглашенная на определенных строках в Прологе. У меня есть 3 линии с несколькими станциями, и все они имеют общие точки друг с другом.Как найти общую станцию ​​между двумя точками карты в Prolog?

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: Charing Cross; B: Вестминстер; Изменение на: Набережная

+1

Это звучит как вопрос домашней работы, не так ли? –

+1

Хорошо, да, действительно, это: D –

+1

, если вы не знаете, с чего начать, тогда это хороший показатель того, что вы должны перечитывать свои книги, как только у вас есть прогресс (то есть исходный код), вы можете попросить пунктуальный вопрос здесь. –

ответ

2

Заявление о проблеме не совсем ясно. Вы ищете маршрут только с одним изменением или любое количество изменений возможно.

1) Рассмотрите возможность путешествовать по вашей части трубы от Vauxhall до Ватерлоо. Существует маршрут через Вестминстер с двумя изменениями и маршрут через Уоррен-стрит с одним изменением. Разрешены ли оба маршрута или только один из них?

2) Исправьте опечатку на названии станции набережной в сосед (charing_cross, embankbent, black).

3) Определите предикат station_on_line (St, Li), что имеет место тогда и только тогда, когда станция St находится на линии Ли и проверить, что для запроса station_on_line(St,blue) возвращает каждую станцию ​​ровно один раз, также и station_on_line(victoria,Li) возвращается в каждой строке Виктории станция работает только один раз.

4) Определите предикат change_at(L1,L2,C), что справедливо, если линии L1 и L2 встречаются на станции C.

5) Случаи 3) и 4) будут достаточно, чтобы найти станцию ​​для изменения, если допустимо только одно изменение, то есть путь от Vauxhall до Ватерлоо через Вестминстер не допускается в 1).

6) Создайте рекурсивное определение, которое позволяет вам найти путь через произвольное количество станций в сети с произвольным количеством строк.

Смежные вопросы