Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Определение отношений на основе фактов




Prolog — это язык программирования для символических, нечисловых вычисле­ний. Он особенно хорошо приспособлен для решения проблем, которые касаются объектов и отношений между объектами. На рис. 1.1 приведен подобный пример: семейные отношения. Тот факт, что Том является одним из родителей Боба, можно записать на языке Prolog следующим образом: parent { torn, bob).

В данном случае в качестве имени отношения выбрано слово parent; torn и bob являются параметрами этого отношения. По причинам, которые станут понятными позже, такие имена, как tor., записываются со строчной буквой в начале. Все дерево семейных отношений, показанное на рис. 1.1, определено с помощью следующей программы Prolog:

parent (pamr bob). parent f tom, bob). parent! torn, liz|I. parent! bob, ann). parent; bob, pat). parent! pat, jim).

Эта программа состоит из шести предложений, каждое из которых объявляет один факт об отношении parent. Например, факт parent (tom, bob) представляет собой конкретный экземпляр отношения parent. Такой экземпляр называют также связью. В целом отношение определяется как множество всех своих экземпляров.



 


Рис. 1.1. Дерево семейных от­ношений

После передачи соответствующей программы в систему Prolog последней можно задать некоторые вопросы об отношении parent, например, является ли Боб одним из родителей Пэт? Этот вопрос можно передать системе Prolog, введя его на терми­нале:?- parent! bob, pat).

Обнаружив, что это — факт, о существовании которого утверждается в програм­ме, Prolog отвечает: yes

После этого можно задать еще один вопрос: 7- parent(liz, pat).

Система Prolog ответит: no

поскольку в программе нет упоминания о том, что Лиз является одним из родителей Пэт. Система ответит также "по" на вопрос?- parent (torn, ben). поскольку в программе даже не встречалось имя Бэн.

Кроме того, системе можно задать более интересные вопросы. Например, кто яв­ляется родителями Лиз? 1- parent! X, liz).

На этот раз Prolog ответит не просто "yes" или "по", а сообщит такое значение X, при котором приведенное выше утверждение является истинным. Поэтому ответ бу­дет таковым: X= t от

Вопрос о том, кто является детьми Боба, можно сообщить системе Prolog сле­дующим образом:?- parent! bob, X).

На этот раа имеется больше одного возможного ответа. Система Prolog вначале выдаст в ответ одно решение:


Глава 1. Введение в Prolog



X — aim

Теперь можно потребовать у системы сообщить еще одно решение {введя точку с запятой), и Prolog найдет следующий ответ:

X - pat

Если после этого будут затребованы дополнительные решения, Prolog ответит "по", поскольку все решения уже исчерпаны.

Этой программе может быть задан еще более общий вопрос о том, кто является чьим родителем? Этот вопрос можно также сформулировать иным образом: Найти X и if, такие, что X является одним иэ родителей X,

Этот вопрос может быть оформлен на языке Prolog следующим образом:?- parent (х, Y).

После этого Prolog начнет отыскивать все пары родителей и детей одну за другой. Решения отображаются на дисплее по одному до тех пор, пока Prolog получает ука­зание найти следующее решение (в виде точки запятой) или пока не будут найдены асе решения. Ответы выводятся следующим образом:

X • раш

Y - bob; X «torn Y- bob; X = torn

Y = lia;

Чтобы прекратить вывод решений, достаточно нажать клавишу <Enter> вместо точки с запятой.

Этой программе, рассматриваемой в качестве примера, можно задать еще более сложный вопрос, например, спросить о том, кто является родителями родителей Джима (дедушками и бабушками). Поскольку в программе непосредственно не пре­дусмотрено использование соответствующего отношения grandparent, этот запрос необходимо разбить на следующие два этапа (рис. 1.2).

1. Кто является одним из родителей Джима? Предположим, что это - некоторый объект Y.

2. Кто является одним из родителей.' Предположим, что это - некоторый объ­ект X

Parent

/\7\ grandparent

parent /

/

Pitc. 1.2. Отношение grandparent, выраженное как композиция двух отношений parent

Подобный сложный запрос записывается на языке Prolog как последовательность двух простых:?- parent (Y, jim), parent (X, Y).

Ответ должен быть следующим: х - bob Y = pat



Часть I. Язык Prolog


Этот составной запрос можно прочитать таким образом: найти такие X и Y, кото­рые удовлетворяют следующим двум требованиям: parent (Y, jim} и parent (X, У)

Если же будет изменен порядок следования этих двух требований, то логический смысл всего выражения останется тем же: parent! Xr У) и parent(Y, jim)

Безусловно, такое же действие может быть выполнено и в программе Prolog, по­этому запрос:

?- parent! X, Y), parent С У, jim).

выдаст тот же результат.

Аналогичным образом, программе можно задать вопрос о том, кто является вну­ками Тома:

?- parent! torn, X), parent; X, Y).

Система Prolog ответит следующим образом:

х = bob Y - ann; X =bob Г = pat

Могут быть также заданы и другие вопросы, например, имеют ли Энн и Пэт об­щих родителей. Эту задачу также можно разбить на два этапа.

1. Кто является одним из родителей Энн (X)?

2. Является ли (тот же) X одним из родителей Пэт?

Поэтому соответствующий вопрос в языке Prolog выглядит следующим образом:?- parent!" X, ann), parent! х, pat).

Ответом на него является; X = bob

Рассматриваемый пример программы позволяет проиллюстрировать перечислен­ные ниже важные понятия.

• В языке Prolog можно легко определить отношение, такое как parent, задавая л-злементные кортежи объектов, которые удовлетворяют этому отношению.

• Пользователь может легко запрашивать систему Prolog об отношениях, опре­деленных в программе.

• Программа Prolog состоит из предложений. Каждое предложение оканчивается
точкой.

• Параметрами отношений могут быть (кроме всего прочего) определенные объ­екты, или константы (такие как torn и ann), а также объекты более общего ха­рактера (такие как X и Y). Объекты первого типа, применяемые в рассматри­ваемой программе, называются атомами. Объекты второго типа называются переменными,

• Вопросы к системе состоят из одной или нескольких целей. Последова­тельность целей, такая как

parent! X ann}, parent! X, pat)

означает конъюнкцию целей:

X является одним из родителей Энн и

X является одним из родителей Пэт.

Слово "цель" (goal) используется для обозначения таких вопросов потому, что система Prolog воспринимает вопросы как цели, которых необходимо достичь.

• Ответ на вопрос может быть положительным или отрицательным, в зависимо­
сти от того, может ли быть достигнута соответствующая цель или нет. В слу-


Глава 1. Введение в Prolog



чае положительного ответа считается, что соответствующая цель была дости­жимой и что цель достигнута. В противном случае цель была недостижимой и не достигнута.

• Если вопросу соответствует несколько ответов, Prolog отыскивает столько от­ветов, сколько потребует пользователь (в пределах возможного).





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 694 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Стремитесь не к успеху, а к ценностям, которые он дает © Альберт Эйнштейн
==> читать все изречения...

2206 - | 2159 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.