- •Таганрог 2001
- •Содержание
- •Введение
- •1. Принципы логического программирования
- •1.1. Базовые понятия
- •1.2. Терминология
- •1.3. Сложные термы, или структуры
- •1.4. Синтаксис строк
- •1.5. Утверждения
- •1.6. Запросы
- •1.7. Ввод программ
- •1.8. Унификация
- •1.9. Арифметические выражения
- •1.10. Вычисление арифметических выражений
- •1.11. Сравнение результатов арифметических выражений
- •Контрольные вопросы и упражнения
- •2. Структуры данных на языке пролог
- •2.1. Списки
- •2.2. Бинарные деревья
- •2.3. Механизм возврата и процедурная семантика
- •3. Представление моделей знаний
- •3.1. Процесс представления знаний
- •3.2. Семантические сети
- •3.3. Фреймы
- •3.4. Механизм наследования в Прологе
- •3.5. Создание динамических баз данных
- •3.6. Представление задач в виде и/или – графов
- •4. Экспертные системы
- •4.1. Системы экспертных консультаций
- •Этап идентификации
- •Этап концептуализации
- •Этап формализации
- •Этап выполнения
- •Этап тестирования
- •Этап опытной эксплуатации
- •Экспертные системы, параллельные и последовательные решения
- •Пример эс, основанной на правилах логического вывода и действующую в обратном порядке
- •Часть 1.
- •Часть 2.
- •Часть 3.
- •Часть 4.
- •Часть 5.
- •4.2. Запоминание пути вывода
- •5. Пример задачи на представление знаний
- •6. Заключение
- •Литература
- •Представление знаний и логическое программирование в системах искусственного интеллекта Учебное пособие
1.6. Запросы
После записи утверждений в базу данных вычисления могут быть инициированы вводом запроса.
Запрос выглядит так же, как и целевое утверждение, образуется и обрабатывается по тем же правилам, но он не входит в базу данных (программу). В Прологе вычислительная часть программы и данные имеют одинаковый синтаксис. Программа обладает как декларативной, так и процедурной семантикой. Запрос обозначается в Прологе утверждением ?-, имеющим арность 1. Обычно запрос записывается в операторной форме: за знаком ?- следует ряд хвостовых целевых утверждений (чаще всего в виде конъюнкции).
Приведем примеры запросов:
?- руководитель (X).
?- руководство(Х,У), служащий (Y).
Запрос иногда называют управляющей командой (директивой), так как он требует от Пролог-системы выполнения некоторых действий. Во многих реализациях Пролога для управляющей команды используется альтернативный символ, а символ ?- обозначает приглашение верхнего уровня интерпретатора Пролога. Альтернативным символом является :-. Таким образом,
:-write(служащий).
это управляющая команда, в результате выполнения которой печатается атом служащий. Управляющие команды будут рассмотрены ниже при описании ввода программ.
1.7. Ввод программ
Введение списка утверждений в Пролог-систему осуществляется с помощью встроенного предиката consult. Аргументом предиката consult является атом, который обычно интерпретируется системой как имя файла, содержащего текст программы на Прологе. Файл открывается, и его содержимое записывается в базу данных. Если в файле встречаются управляющие команды, они сразу же выполняются. Возможен случай, когда файл не содержит ничего, кроме управляющих команд для загрузки других файлов. Для ввода утверждений с терминала в большинстве реализации Пролога имеется специальный атом, обычно user. С его помощью утверждения записываются в базу данных, а управляющие команды выполняются немедленно.
Помимо предиката consult, в Прологе существует предикат reconsult. Он работает аналогичным образом. Но перед добавлением утверждений к базе данных из нее автоматически удаляются те утверждения, головные цели которых сопоставимы с целями, содержащимися в файле перезагрузки. Такой механизм позволяет вводить изменения в базу данных. В Прологе имеются и другие методы добавления и удаления утверждений из базы данных. Некоторые реализации языка поддерживают модульную структуру, позволяющую разрабатывать модульные программы.
1.8. Унификация
Одним из наиболее важных аспектов программирования на Прологе является использование унификации (отождествления) и конкретизации переменных.
Пролог пытается отождествить термы при доказательстве, или согласовании, целевого утверждения. Например, в программе для согласования запроса ?- человек(Х) целевое утверждение человек(X) может быть отождествлено с фактом служащий(Иван), в результате чего переменная Х станет конкретизированной: Х= Иван.
Переменные, входящие в утверждения, отождествляются особым образом - сопоставляются. Факт доказывается для всех значений переменной (переменных). Правило доказывается для всех значений переменных в головном целевом утверждении при условии, что хвостовые целевые утверждения доказаны. Предполагается, что переменные в фактах и головных целевых утверждениях связаны квантором всеобщности. Переменные принимают конкретные значения на время доказательства целевого утверждения.
В том случае, когда переменные содержатся только в хвостовых целевых утверждениях, правило считается доказанным, если хвостовое целевое утверждение истинно для одного или более значений переменных. Переменные, содержащиеся только в хвостовых целевых утверждениях, связаны квантором существования. Таким образом, они принимают конкретные значения на то время, когда целевое утверждение, в котором переменные были согласованы, остается доказанным.
Терм Х сопоставляется с термом Y по следующим правилам. Если Х и Y - константы, то они сопоставимы, только если они одинаковы. Если Х является константой или структурой, а Y - неконкретизированной переменной, то Х и Y сопоставимы и Y принимает значение Х (и наоборот). Если Х и Y - структуры, то они сопоставимы тогда и только тогда, когда у них одни и те же главный функтор и арность и каждая из их соответствующих компонент сопоставима. Если Х и Y - неконкретизированные (свободные) переменные, то они сопоставимы, в этом случае говорят, что они сцеплены.
