ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «Университет» Факультет филологии и журналистики Кафедра ___ Дисциплина «____» Отчет к лабораторной работе № «Построение БД и формирование запросов в среде 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(_)).