Uploaded by Alex Shnaider

Построение БД и формирование запросов в среде SWI-Prolog

advertisement
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«Университет»
Факультет филологии и журналистики
Кафедра ___
Дисциплина «____»
Отчет к лабораторной работе №
«Построение БД и формирование запросов в среде SWI-Prolog»
Выполнил:
студент группы ФИО
Принял:
ст. преподаватель ФИО
Москва, 2021 г.
Задание:
Ход практической работы:
Чтобы период измерялся в разных единицах — опишем свой собственный тип
данных:
domains
period_d = days(integer); years(integer); hours(integer)
Информацию о планетах будем хранить во встроенной базе данных prolog, тип
записи необходимо описать в разделе database:
database planets
planet(string, integer, period_d, period_d)
Для сравнения периодов напишем свой собственный предикат — период в
часах всегда меньше периода в днях, …, если же оба сравниваемых периода
записаны в одинаковых единицах — выполняется сравнение. Тут не дни не
переводятся в часы, т.к. в конкретно этой задаче не известно как выполнять
перевод.
predicates
less(period_d, period_d)
clauses
less(hours(_), days(_)):-!.
less(hours(_), years(_)):-!.
less(days(_), years(_)):-!.
less(hours(A), hours(B)):- !, A < B.
less(days(A), days(B)):- !, A < B.
less(years(A), years(B)):- !, A < B.
Дальше, в разделе clauses опишем содержимое базы данных:
% Меркурий 39 88 суток 176 суток
% ...
planet("Merkurii", 39, days(88), days(176)).
planet("Venera", 72, days(225), days(117)).
planet("Zemlya", 100, days(365), hours(24)).
planet("Mars", 152, days(687), hours(25)).
planet("Yupiter", 520, years(12), hours(10)).
planet("Saturn", 954, years(29), hours(10)).
planet("Uran", 1920, years(84), hours(24)).
planet("Neptun", 3010, years(165), hours(22)).
planet("Pluton", 3950, years(247), days(6)).
Проверим, что все это работает описав запросы (в разделе
goal):
goal
1) Какие планеты ближе к Солнцу, чем Земля?
planet("Zemlya", DistZemlya, _, _),
planet(X, DistX, _, _),
DistX < DistZemlya.
2) Какие планеты дальше от Солнца, чем Земля?
planet("Zemlya", DistZemlya, _, _),
planet(X, DistX, _, _),
DistX > DistZemlya.
3) На каких планетах солнечные сутки меньше, чем земные?
planet("Zemlya", _, _, DayLenZemlya),
planet(X, _, _, DayLenX),
less(DayLenX, DayLenZemlya).
4) На каких планетах период обращения измеряется в годах?
planet(X, _, years(_), _).
5) На каких планетах солнечные сутки измеряются в часах?
planet(X, _, _, hours(_)).
6) На каких планетах солнечные сутки измеряются в сутках?
planet(X, _, _, days(_)).
Download