Сформулировать вопросы на Прологе:Живет ли лягушка в теремке? Какое прозвище у лисы? Кто имеет прозвище горюха? Какой следует задать вопрос, чтобы узнать обитателей теремка (без прозвищ)?
Сформулировать вопросы на Прологе:Кто родился в 1971 году? Кто родился в октябре? Кто любит книги? Кто любит и книги и танцы?
4) База данных “Колобок”: ушел(колобок,дедушка), ушел(колобок, бабушка), ушел(колобок, заяц), ушел(колобок, волк), ушел(колобок, медведь), не_ушел(колобок, лиса).
Сформулировать вопросы на Прологе:Кто ушел от волка? Кто не ушел от лисы? Кто ушел от волка и от бабушки? Какой следует задать вопрос, чтобы узнать всех персонажей сказки?
Сформулировать вопросы на Прологе: Когда бывает обед? Что бывает между 14 и 19 часами? Когда бывает сон? (сколько будет решений?)
6) Построить базу данных “Важнейшие события Древнего Мира” на основе установленных фактов, произошедших с 31 по 6 век до нашей эры.
Каждый факт приводить в виде событие(Х,Y,Z), где X — название государства, где произошло событие, Y - в каком веке произошло событие, Z — какое произошло событие.
В 31-м веке до нашей эры возникли первые города-государства. Единое государство в Египте образовалось в 30 веке до нашей эры. В 27 веке до нашей эры в Индии появились первые древнейшие города, а в Египте построена пирамида Хеопса. Первые греческие государства появились в 18 веке до нашей эры. В этом же веке в Египте произошло крупное восстание бедняков и рабов. В 15 веке до нашей эры появились первые государства в Китае. Тутмос III правил в Египте в 15 веке до нашей эры. Греция вела троянскую войну в 13 веке до нашей эры. Вторжение борийских племен в Грецию произошло в 11 веке до нашей эры. В 8 веке до нашей эры был основан город Рим. Олимпийские игры стали проводиться в Греции в 8 веке до нашей эры. В 6 веке до нашей эры в Риме была установлена республика, а в Греции произошли реформы Солона. В этом же веке персы взяли Вавилон в Междуречье и завоевали Египет.
1. Составить 3 запроса к этой базе данных.
2. Какие события произошли в период с 15 до 7 в. до н.э.
7) В таблице даны некоторые характеристики движения планет Солнечной системы(числовые величины округлены):
Таблица 6.
Характеристики движения планет солнечной системы
Планета
Расстояние до Солнца (у.е.)
Период обращения
Средние солнечные сутки
Меркурий
88 суток
176 суток
Венера
225 суток
117 суток
Земля
365 суток
24 часа
Марс
687 суток
25 часов
Юпитер
12 лет
10 часов
Сатурн
29 лет
10 часов
Уран
84 года
24 часа
Нептун
165 лет
22 часа
Плутон
247 лет
6 суток
Составить базу данных, учитывая измерение по некоторым параметрам в разных еденицах.
Ответить на вопросы: Какие планеты ближе к Солнцу, чем Земля? Какие планеты дальше от Солнца, чем Земля? На каких планетах солнечные сутки меньше, чем земные? На каких планетах период обращения измеряется в годах?
8) Построить базу знаний “Рабочая смена”:
Мария работает в дневную смену. Сергей работает в вечернюю смену. Борис работает в вечернюю смену. Валентина работает в вечернюю смену. Два служащих знают друг друга, если они работают в одну смену. Определить: Знает ли Сергей Бориса? Кого знает Валентина? Кого знает Мария?
9) Даны результаты сдачи экзаменов для группы из пяти учеников:
Таблица 7.
Успеваемость
Фамилия
Алгебра
Геометрия
История
Бобров
Вяткин
Кротов
Соснин
Вавилов
Построить базу знаний о результатах экзаменов, определив в ней следующие правила:
отличник - человек, у которого по всем предметам пятерки;
двоечник - есть хотя бы одна двойка;
математик - по алгебре и по геометрии учится на 4 и 5;
введите предикаты алгебра, геометрия, история для определения оценки Y для ученика X.
Получить ответы на следующие вопросы: Является ли Вяткин отличником? Определить всех отличников. Является ли Соснин математиком? Определить всех неуспевающих по истории.
10) Сформировать базу знаний “Квартет” из следующих фактов и правил:
Мартышка играет на скрипке. Осел играет на альте. Козел играет на виолончели. Мишка играет на контрабасе. Четверо музыкантов X,Y,Z и W могут образовать квартет, если один из них играет на скрипке, другой — на альте, третий — на виолончели и четвертый — на контрабасе.
Ответить на вопросы: Кто играет на альте? На чем играет мартышка? Образуют ли квартет Мартышка, Осел, Козел и Мишка? Кто из музыкантов данной базы знаний может образовать квартет?
Дополните базу данных предикатом мужчина, женщина. Определите правила дед, бабушка, внук, внучка, тетя, дядя.
Сформулировать вопросы на Прологе:
Кто является ребенком Екатерины и Петра? Кто является дедом Юлии? Кто является бабкой Юлии?
13) Построить базу знаний и сформулировать к ней вопросы, основываясь на следующих утверждениях: Резвый - это собака. Рекс-это собака. Белка – это кошка. Быстрая - это лошадь. Резвый - черная. Белка - белая. Рекс -рыжая. Быстрая - белая. Домашние животные - это собака или кошка. Животные – это либо лошадь, либо домашние животные. Том владеет тем, кто собака и не черного цвета. Кейт владеет тем, кто либо черного цвета, либо лошадь.
14) Построить базу знаний. Муська — коричневая кошка, Стрелка — черная кошка, Мурка — рыжая кошка. Рекс, Дружок и Мухтар — собаки. Дружок — рыжая, Мухтар — белая. Все животные, которыми владеют Анатолий и Николай, имееют родословные. Анатолий владеет всеми черными и коричневыми животными, а Николай владеет всеми собаками небелого цвета, которые не являются собственностью Анатолия. Иван владеет Муркой, если Николай не владеет Муськой и если Мухгар не имеет родословной. Рекс — пятнистая собака. Определить, какие животные не имеют хозяев.
15) Составить базу знаний “Знакомства” из следующих фактов и правил:
Мери прелестна. Джон добрый. Джон мужественный. Джон сильный. Некто счастлив, если богатый или нравится женщинам. Мужчина нравится женщине, если женщина нравится мужчине и он добрый, либо мужчина добрый и сильный. Мужчине нравится женщина, если она прелестна.
Сформулировать вопрос: счастлив ли Джон? Найти мужчин, которые могут нравиться женщинам.
16) Ответьте на вопрос “Что ест моя кошка?“, если:
Птицам нравятся червяки. Кошкам нравятся рыбы. Друзья нравятся друг другу. Моя кошка мой друг. Моя кошка ест все, что ей нравится.
17) Запрограммируйте утверждения.
Число четное. Число не четное. Ни одно число не является четным и нечетным одновременно. Число не четное, если следующее за ним четное. Число, следующее за данным числом нечетное, если данное число четное, число, следующее за данным числом четное, если данное число нечетное.
Рекомендуемая литература
1. Стобо Д.Ж. Язык программирования Пролог: Пер. с англ.- М.- Радио и связь, 1993.-368 с.:ил.
2. Ин Ц., Соломон Д. Использование Турбо-Пролога: Пер. с англ.-М.:Мир, 1993.-608 с.,ил.
3. Информатика. Задачник-практикум в 2 т./Под ред. И.Г.Семакина, Е.К. Хеннера: Том.2.-М.:-БИНОМ. Лаборатория знаний, 2003.-278 с.:ил.
4. Каймин В.А. Основы компьютерной технологии.- М.:Финансы и статистика, 1992.-208 с.: ил.
Лабораторная работа №2. Арифметика. Управление логическим выводом в программах
Пример 1.Описать предикаты для вычисления суммы, разности, произведения, частного двух чисел, возведения числа в квадрат, вывода остатка при деление на 3, вывод случайного числа из интервала [1,100].
Программа 13. Арифметика
Domains
N=integer
R=real
Predicates
add(N,N)
sub(N,N,N)
multi(N,N,N)
division(N,N,R)
kvadrat(N,N)
ostat(N,N)
vivod(N)
Clauses
add(X,Y):-S=X+Y, write(“Sum= ”,S),nl.
sub(X,Y,S):-S=X-Y.
multi(X,Y,P):-P=X*Y.
division(X,Y,R):-Y<>0, R=X/Y.
kvadrat(X,N):-N=X*X.
ostat(X,N):-N=X mod 3.
vivod(N):-random(Y), N=1+Y*100.
Пример 2. Программирование взаимоисключающих утверждений. Процедуру нахождения наибольшего из двух чисел можно записать в виде отношения
max(X,Y,X):-X>=Y.
max(X,Y,Y):-X<Y.
Эти правила являются взаимоисключающими. Возможна более экономная формулировка: если X>=Y, то максимум=X, иначе =Y. На Прологе это запишется следующим образом:
max(X,Y,X):-X>=Y, !.
max(_,Y,Y).
Программа 14. Максимум
Domains
N=integer
Predicates
max(N,N,N)
Clauses
max(X, Y, X):-X>Y,!.
max(_,Y,Y).
Пример 3. Рассмотрим различные способы записи предиката different, определяющего различны ли числа, использующие сочетание встроенных предикатов ! и fail.
different(X,X):-!,fail.
different(_,_).
или
different(X,Y):-X=Y,!,fail.
different(_,_).
или
different(X,Y):-X=Y,!,fail; true.
/* true –встроенный предикат, который всегда истиннен*/