программе ничего не говорится о том, является ли Елена родителем Нины. Программа ответит «нет» и на вопрос
Цель: родитель (иван, алексей ).
Потому, что имя Алексей в программе даже не упоминается. Можно задавать и более интересные вопросы. Например: «Кто является родителем Елены?»
Цель: родитель (X, елена).
На этот раз система ответит не просто «да» или «нет». Она скажет нам, каким должно быть значение X (ранее неизвестное), чтобы вышеприведенное утверждение было истинным. Поэтому мы получим ответ:
X = иван X = ivan
Вопрос «Кто дети Петра» можно передать пролог-системе в такой форме:
Цель: родитель (петр, X).
В этом случае возможно несколько ответов. В окне сообщений система ответит:
Х=ирина X=irina
Х=нииа X=nina
2 Решения 2 Solutions
Зададим программе более общий вопрос «Кто чей родитель?» Приведем другую формулировку этого вопроса' i
Найти X и Y такие, что X - родитель Y. На Прологе это записывается так:
Цель: родитель (X, Y).
Система будет по очереди находить все пары вида «родитель-ребенок». Ответы выводятся следующим образом.
Х=ольга, У=петр X=olga, Y=petr
Х=иван, У=петр X=ivan, Y=petr
Х=иван, У=елена X=ivan, Y=elena
Х=петр, ¥=ирина X=petr, Y=irina
Х=петр, У=нина X=petr, Y=nina
Х=нина, У=павел X=nina, Y=pavel
6 Решений 6 Solutions
Нашей программе можно задавать и еще более сложные вопросы, скажем, кто является родителем родителя Павла? Поскольку в нашей программе прямо не сказано, что представляет собой отношение родительродителя, такой вопрос следует задавать в два этапа, как показано на рис. 4.
1. Кто родитель Павла? Предположим, что это некоторый Y.
2. Кто родитель Y? Предположим, что это некоторый X.
Такой составной вопрос на Прологе записывается в виде последовательности двух простых вопросов:
Цель: родитель (Y, напел), родитель (X, Y). Ответ будет:
Х=петр
У=нина
Наш составной вопрос можно интерпретировать и так: «Найти ХиУ, удовлетворяющие следующим двум требованиям»: родитель (Y, павел) и родитель (X, Y).
Если мы поменяем порядок этих двух требований, то логический смысл останется прежним:
Цель: родитель (X, Y), родитель (Y, павел).
При этом результат будет тем же.
Таким же образом можно спросить. «Кто внуки Ивана?» Цель: родитель (иван, X), родитель (X, Y).
Система ответит так:
Х=петр, У=ирина X=petr, Y=irina
Х=петр, Y=hhh3 X=petr, Y=nina
2 Решения 2 Solutions
Следующим вопросом мог бы быть такой: «Есть ли у Ирины и Нины общий родитель?» Его тоже можно выразить в два этапа:
1. Какой X является родителем Ирины?
2. Является ли тот же X родителем Нины? Соответствующий запрос к пролог-системе будет выглядеть так:
Цель: родитель (X, ирина), родитель (X, нина). Ответ:
Х=петр X=petr
1 Решение 1 Solution
Наша простейшая программа помогла проиллюстрировать некоторые важные моменты.
• На Прологе легко определить отношение, подобное отношению родитель, указав n-ку объектов, для которых это отношение выполняется.
• Пользователь легко может задавать пролог-системе вопросы, касающиеся отношений, определенных в программе.
• Пролог-программа состоит из предложений. Каждое предложение заканчивается точкой.
• Аргументы отношения могут быть (среди прочего): конкретными объектами, или константами (такими, как иван и ирина), или абстрактными объектами, такими, как X и Y. Объекты первого типа называются атомами. Объекты второго типа - переменными.
• Вопросы к системе состоят из одного или более целевых утверждений (или кратко - целей). Последовательность целей, такая как
Цель: родитель (X, ирина), родитель (X, пина).
означает конъюнкцию этих целевых утвержденний:
X - родитель Ирины и
X - родитель Нины
Пролог-система рассматривает вопросы как цели, к достижению которых нужно стремиться.
• Ответ на вопрос может оказаться или положительным или отрицательным в зависимости от того, может ли быть соответствующая цель достигнута или нет. В случае положительного ответа мы говорим, что соответствующая цель достижима и успешна. В противном случае цель недостижима, имеет неуспех или терпит неудачу.
• Если на вопрос существует несколько ответов, пролог-система найдет столько из них, сколько пожелает пользователь.
Контрольные вопросы и упражнения
1. Для программы tree lvip.pro найдите, какими будут ответы пролог-системы на следующие вопросы:
а) Цель: родитель(павел, X).
б) Цель: родитель(Х, па вел).
с) Цель: родитель(ольга, X), родитель(Х, нина). д) Цель: родитель(ольга, X), родитель(Х, Y), родитель(У, павел).
2 Сформулируйте на Прологе следующие вопросы об отношении родитель.
а) Кто родитель Нины7
п) Есть ли у Елены ребенок?
с) Кто является родителем родителя Нины?
3. Запишите на Прологе следующие факты:
• Сергею нравятся компьютеры
• Людмиле нравится чтение
• Евгению нравится плавание
• Наташе нравится теннис
• Сергею нравится борьба
4. Напишите на Прологе простейшую программу, содержащую сведения о всех служебных автомобилях института; марку автомобиля, его возраст, цвет, пробег, стоимость. Для этой программы задайте следующий запрос: «Присутствует ли в имеющейся базе данных автомобиль стоимостью больше $60000»?
ИСПОЛЬЗОВАНИЕ ПРАВИЛ
Нашу программу можно легко расширить многими интересными способами. Давайте сперва добавим информацию о том, каков пол людей, участвующих в отношении родитель. Это можно сделать, просто добавив в нее следующие факты:
женщина (ольга). женщина (елена). женщина (ирина). женщина (нина). мужчина (иван). мужчина (петр). мужчина (павел).
Мы ввели здесь два новых отношения - мужчина и женщина. Эти отношения - унарные (или одноместные). Бинарное отношение, такое как родитель, определяет отношение между двумя объектами, унарные же можно использовать для объявления наличия (отсутствия) простых свойств у объектов Первое
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.