![]() |
От: | Аноним | |
Дата: | 26.05.07 17:35 | ||
Оценка: |
object('улица','Жуковского',
[
['налево','проспект','Литейный',53,'назад'],
['направо','проспект','Литейный',55,'вперед'],
[1,3,5,7,9,11,13],
[2,4,6,8,10],
['налево','улица','Чехова',1,'вперед'],
[15,17,19,21,23,25],
[12,14],
['налево','улица','Маяковского',9,'вперед'],
['направо','улица','Маяковского',7,'назад'],
[27,29,31,33,35,37,39,41,43,45,47,49,51],
[16,18,20,22,24,26,28],
['налево','улица','Восстания',21,'вперед'],
['направо','улица','Восстания',19,'назад'],
[53,55,57],
[30,32,34],
['налево','улица','Радищева',1,'вперед'],
[59,61,63,65],
[36,38],
['налево','проспект','Лиговский',19,'назад'],
['направо','проспект','Лиговский',21,'вперед']
]).
object('набережная','Кутузова',
[
['начало','набережная','Робеспьера'],
['налево','проспект','Литейный',1,'вперед'],
['направо','Мост','Литейный',-1,'назад'],
[],
[2],
['налево','переулок','Кричевский',1,'вперед'],
[],
[4,6,8,10,12,14,16,18,20,22],
['налево','улица','Гагаринская',1,'вперед'],
[],
[24,26,28,30,32,34,36],
['налево','набережная','реки Фонтанки',-1,'вперед'],
['налево','набережная','Лебяжьего канала',-1,'вперед'],
['конец','набережная','Дворцовая']
]).
Составить отношение
path(Source,Target,M).
Аргумент Source — список — содержит указание на конкретный объект
из созданной на первом этапе базе данных в формате [Type,Name,Building],
где
Type — тип объекта (улица, площадь, проезд, переулок и т.п.),
Name — имя объекта,
Building — номер конкретного дома.
Аргумент Target — список — содержит указание на конкретный объект
из созданной на первом этапе базе данных в формате [Type,Name,Building],
где
Type — тип объекта (улица, площадь, проезд, переулок и т.п.),
Name — имя объекта,
Building — номер конкретного дома.
Аргумент M — список — содержит описание маршрута от первого объекта
до второго объекта в формате, совпадающем с форматом описания улиц
(при этом от проходимых улиц содержится только тот участок, по которому
проходит маршрут).
для заданного набора улиц построить
базу данных, состоящую из правил, имеющих вид:
object (Type, Name, List).
Type — тип объекта (улица, площадь, проезд, переулок и т.п.),
Name — имя объекта,
List — описание самого объекта в виде списка.
Например object ("улица","Московская",[1,3,5],[2,4,6],
["налево","улица","Аграрная",11,"назад"],
["направо","проезд","Поперечный",3,"вперед"],
[7,11,13],[10,12,14]]
Элементами списка являются подсписки следующего вида: часть подсписков
перечисляет номера домов, расположенных в порядке возрастания в пределах
одного квартала, при этом сначала идёт подсписок с нечётными номерами,
затем — с чётными номерами. Между списками, соответствующими кварталам,
находятся списки, определяющие возможные повороты в пересекающие улицы,
имеющие вид:
в первом подсписке указано слово "налево", затем — тип улицы, название
улицы, номер первого нечётного дома (на углу улицы, куда происходит
поворот), а также направление движения ("вперед", либо "назад");
во втором подсписке указано слово "направо", затем — тип улицы,
название улицы, номер первого нечётного дома (на углу улицы, куда
происходит поворот), а также направление движения ("вперед", либо
"назад").
Предполагается, что движение вперед идёт от меньшего номера дома к большему
вдоль улицы. Если поворот только в одну сторону, то записывается один
соответствующий подсписок.
Замечание.
Если начало улицы приходится на пересечение с некоторой другой улицей, то
список описания предваряется описанием поворотов, аналогично и для конца улицы.
Если начало улицы является продолжением некоторой другой улицы, то предваряем
описание списком, состоящим из подсписка, первым атомом которого является
слово "начало" либо "конец", а следующими — тип и имя объекта, откуда
происходит вытекание описанной улицы. Аналогично и для конца улицы.