- •Глава 1 факты и правила
- •1.1. Использование языка пролог
- •Вызов транслятора языка Пролог
- •Синтаксис различных версий Пролога
- •1. 2. Факты Части Пролог-программы
- •Форма записи фактов в Прологе
- •Ввод программы
- •3. Запросы к базе данных Составление запроса
- •Запросы с константами
- •Запросы с переменными
- •Выполнение запроса
- •Составные запросы
- •Переменная _
- •1. 4. Прав ила
- •Форма записи правила: Заголовок:— Тело
- •Правило, при определении которого используются переменные
- •Пример: база данных "путешествие"
- •Косвенные отношения
- •1. 5. Процедуры Декларативная и процедурная семантика
- •Версия программы "можно_путешествовать", состоящая из двух правил
- •Запросы к предикату "можно_путешествовать2"
- •Соединитель "или"
- •Версия предиката "можно_путешествовать", в которой употребляется соединитель;
- •1. 6. Рекурсивные процедуры Определение понятия рекурсии
- •"Предок"
- •Состав рекурсивной процедуры
- •Рекурсивная версия процедуры "можно_путешествовать"
- •Порядок выполнения запроса к процедуре "можно_путешествовать4"
- •1. 7. Типы отношений Характеристики отношений
- •Ограничения вида один-к-одному
- •Ограничения вида один-к-многим
- •Ограничения вида многие-к-одному
- •Ограничения вида многие-к-многим
- •Симметрия
- •Асимметрия
- •Рефлексивность и нерефлексивность
- •Транзитивность
- •Анализ общеупотребительных отношений
- •Библиографические заметки
- •Упражнения
Порядок выполнения запроса к процедуре "можно_путешествовать4"
Дерево доказательства, изображенное на рис. 1. 4, иллюстрирует выполнение запроса к процедуре "можно_путешествовать4".
Эта диаграмма читается точно так же, как и предыдущее дерево доказательства.
1. 7. Типы отношений Характеристики отношений
Фразы Пролог-программы применяются для представления отношений между термами. Термы обычно употребляются для представления сущностей, входящих в мир. Поэтому для повышения эффективности программы вначале целесообразно проанализировать отношения, встречающиеся в моделируемом мире, а затем принять решение о том, как представить каждый тип отношений при помощи фраз языка Пролог. Программист может дать директиву интерпретатору языка Пролог о необходимости принять во внимание свойства отношений, чтобы оптимизировать обработку запросов. Для простоты в оставшейся части раздела рассматриваются только отношения между двумя аргументами (т. е. бинарные отношения). В принципе анализ можно распространить и на отношения с большим количеством аргументов.
Ограничения, обеспечивающие целостность отношений. Свойства
Для аргументов любого бинарного отношения будет справедливо одно из следующих ограничений, обеспечивающих целостность отношения:
один-к-одному
один-к-многим
многие-к-одному
многие-к-многим
Помимо этого, некоторые отношения можно охарактеризовать наличием или отсутствием следующих свойств:
симметрия (асимметрия)
рефлексивность (нерефлексивность)
транзитивность (нетранзитивность)
Все эти свойства и ограничения, обеспечивающие целостность отношений, подробно рассматриваются далее.
Ограничения вида один-к-одному
Если бинарное отношение с аргументами Х и Y регулируется ограничением вида один-к-одному, обеспечивающим целостность этого отношения, то это означает, что для заданного значения Х существует единственное значение Y, удовлетворяющее этому отношению, а для заданного значения Y существует только одно значение X, которое удовлетворяет отношению. К примеру, отношение между человеком и его номером по социальному страхованию (сокращенно — "нсс") регулируется ограничением вида один-к-одному:
нсс ('Паула Смит', '347_22_5560').
(Примечание: любые символы, стоящие между апострофами, скажем, 'Паула Смит' в приведенном примере, образуют один атом.)
Применение ограничения, обеспечивающего целостность отношения
Ограничения, обеспечивающие целостность отношений, вступают в силу либо когда в программу вводятся новые конкретные случаи отношений (т. е. факты), либо когда в базе данных выполняется поиск конкретных случаев отношений.
Предположим, что имеется программа сбора данных, в которой ограничения, обеспечивающие целостность отношений, принимаются во внимание при добавлении новых фактов. Далее предположим, что отношение "нсс/2" регулируется ограничением вида один-к-одному и что приведенный выше факт о номере Паулы по социальному страхованию уже содержится в базе данных. Если пользователь попытается ввести в базу еще один факт "нсс" о Пауле Смит, скажем,
нсс ('Паула Смит', '347_22_5561').
то программа сбора данных обнаружит это и откажется признать новый факт.
Если известно, что запрос должен иметь только один ответ, то можно дать директиву интерпретатору языка Пролог о необходимости прекратить поиск дополнительных ответов после обнаружения первого ответа. В этом случае ограничение, обеспечивающее целостность отношения, реализуется программой, которая осуществляет поиск данных в множестве фраз текущей программы. При написании такой программы нужно воспользоваться предикатом "сократить" (cut), сведения о котором излагаются в гл. 3.