Меллиш К. - Программирование на языке пролог стр 5.

Шрифт
Фон

играть(джон,мэри,футбол).

играть(джейн, джим,бадминтон).

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

В Прологе можно объявить факты, которые не являются истинными в реальном мире. Например, можно было бы написать король(джон, франция), чтобы объявить, что Джон является королем Франции.В реальном мире этот факт со всей очевидностью является ложным, в частности, потому, что монархия во Франции уничтожена приблизительно в 1792 г. Но Пролог не знает этого и не заботится об этом. Факты в Прологе просто позволяют выражать произвольные отношения между объектами.

Совокупность фактов в Прологе называется базой данных.Мы будем пользоваться термином база данныхвсякий раз при объединении вместе некоторых фактов (а в дальнейшем и правил) для совместного их использования при решении некоторой конкретной задачи.

1.2. Вопросы

?- имеет(мэри, книга).

Если мы интерпретируем мэрикак человека по имени Мэри,а книга- это какая-то конкретная книга, то смысл вопроса в следующем: «Имеет ли Мэри (данную конкретную) книгу?»или «Имеет ли место факт, что Мэри имеет данную книгу?».Мы не спрашиваем, имеет ли она все книги или книги вообще.

Обращение к Прологу с вопросом инициирует процедуру поиска в базе данных, ранее введенной в систему. Пролог ищет факты, сопоставимыес фактом о вопросе. Два факта сопоставимы(или соответствуют один другому), если их предикаты одинаковы (побуквенное совпадение) и их соответствующие аргументы попарно совпадают. Если Пролог находит факт, сопоставимый с вопросом, то он отвечает да . Если в базе данных такого факта не существует, то Пролог отвечает нет. Ответ, выдаваемый Прологом, выводится на дисплей терминала непосредственно под запросом. Пусть имеется следующая база данных:

нравится(джо,рыба).

нравится(джо,мэри).

нравится(мэри,книга).

нравится(джо,книга).

Если все эти факты введены в Пролог-систему, то можно было бы делать следующие вопросы,

Связь введенного понятия с математической логикой обсуждается в гл. 10. - Прим. ред.
В записи программ на Прологе и в ответах Пролог-системы используются слова двух типов: 1) имена, определяемые пользователем (например, джон, книга, нравится) ;2) имена и служебные слова, определенные в языке Пролог (например, is, get).Учитывая, что слова первого типа имеют некоторую смысловую нагрузку (для читателя, но не для Пролога), все они переведены на русский язык. Слова второго типа зарезервированы в языке Пролог. Поэтому в тексте они оставлены в исходном виде, за исключением переведенных на русский язык ответов Пролога на вопросы yes- да, no нет.- Прим. перев.

ответы на которые Пролог написал бы непосредственно под текстом вопроса:

?- нравится(джо,деньги).

нет

?- нравится(мэри,джо).

нет

?- нравится(мэри,книга).

да

?- король(джон,франция).

нет

Ответы на три первых вопроса должны быть понятны. Кроме этого, Пролог отвечает нетна вопрос о том, является ли Джон королем Франции. Система выдает такой ответ, так как среди фактов в базе данных, представленной приведенными выше четырьмя отношениями нравится, нет отношений, указывающих на королевские звания. В Прологе ответ нетиспользуется в смысле ничто в базе данных не согласуется с вопросом.Важно помнить, что ответ нет вовсе не эквивалентен ответу является ложным.Предположим, например, что база данных содержит три факта об известных мыслителях Греции:

человек(сократ).

человек(аристотель).

афинянин(сократ).

Можно было бы сделать несколько вопросов:

?- афинянин(сократ).

да

?- афинянин(аристотель).

нет

?- грек(сократ).

нет

Хотя тот факт, что Аристотель жил когда-то в Афинах, может быть исторически верным, мы просто не можем доказатьего на основе фактов, представленных в базе данных. Более того, хотя в базе данных содержится факт о том, что Сократ жил в Афинах, это не доказываеттого, что он был греком, если только в базе данных нет дополнительной информации. Таким образом, когда Пролог на вопрос отвечает нет, это значит не доказуемо, не согласуется с базой данных.

В приведенном ранее примере Джону и Мэри нравится один и тот же объект. Мы знаем, что им нравится один и тот же объект, так как одно и то же имя книгапоявляется в обоих фактах.

Обсуждавшиеся до сих пор факты и вопросы не представляют большого интереса. Все что мы можем сделать это получить обратно ту же самую информацию, которую мы ввели в систему. Более полезны были бы вопросы вида: «Какие объекты нравятся Мэри?».Именно для реализации такой возможности предназначены переменные.

1.3. Переменные

данетXXX

При поиске ответа на вопрос Пролог организует просмотр всех фактов в базе данных, чтобы обнаружить объект, который эта переменная могла бы обозначать. Так, когда мы спрашиваем «Нравится ли Джону X?»,Пролог просматривает все известные ему факты для обнаружения тех вещей, которые нравятся Джону.

Такая переменная, как X, сама по себе не является именем какого-то конкретного объекта, но она может быть использована для обозначения объектов, которым мы не можем дать имя. Например, мы не можем чему-то, что нравится Джону,дать имя как объекту, поэтому для выражения подобных вопросов вместо вопросов вида

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке