- •Глава 6 представление знаний
- •6.1. Представление знаний при помощи пролога
- •Исчисление предикатов
- •Вычислительные формализмы
- •Пролог как вычислительный формализм
- •Формальный смысл
- •Внешний смысл
- •Обманчивая природа внешнего смысла
- •Представление знаний при помощи языка Си
- •Расширение языка Пролог
- •Другие вычислительные формализмы
- •6.2. Семантические сети Узлы и дуги
- •Семантическая сеть как Пролог-программа
- •6.3. Фреймы Представление знаний о ситуациях
- •Наследование значений слотов
- •Оценка формализма фреймов
- •Реализация фрейм - программы на Прологе
- •Запрет наследования
- •6.4. Объектно-ориентированное программирование Объекты и сообщения
- •Наследование
- •Объектно-ориентированное программирование в терминах абстрактных типов данных
- •Объектно-ориентированное программирование в терминах формализма фреймов
- •6.5. Механизм наследования в прологе Наследование в других формализмах
- •Наследование в Прологе
- •Состояния знаний
- •Обзор механизма наследования
- •Создание дерева состояний
- •Процедура "послать"
- •Опровержение фразы
- •Концепции механизма наследования
- •Пример с собранием
- •Пример с птицами
- •Реализация процедуры "послать"
- •Алгоритм работы процедуры "послать"
- •6.6. Программа, выполняющая запросы к базе данных
- •Состояния как виртуальные базы данных
- •Использование процедуры "з"
- •Опрос базы данных (добавление нового состояния)
- •Процедура "отобразитьсостояния"
- •Полезные свойства программы, выполняющей запросы к базе данных
- •Реализация программы, выполняющей запросы
- •Процедура "отобразить"
- •Процедура "з"
- •Процедура "характер"
- •6.7. Описание изменений базы данных
- •Мир кубиков
- •Картина состояния
- •Внесение изменений в базу данных при помощи процедуры "поместить"
- •Реализация процедуры "поместить"
- •Оценка механизма наследования
- •Процедура "послать" как предикат метаязыка
- •Библиографические заметки
- •Упражнения
6.6. Программа, выполняющая запросы к базе данных
Теперь рассмотрим некоторые применения механизма наследования, Первым из них будет таблично-управляемая программа, выполняющая запросы к базе данных. Эта программа предоставляет пользователю возможность последовательно уточнять запросы. Описываемая данной программой система — это ведомость запасов бумаги полиграфической компании.
Состояния как виртуальные базы данных
В начале сеанса работы пользователя с программой, выполняющей запросы к базе данных со сведениями о бумаге, база данных ассоциируется с состоянием, названным «бумага». Когда пользователь вводит запрос, требуя выдачи сведений об определенных позициях ведомости с информацией о бумаге, удовлетворяющих заданным критериям, то автоматически вводится новое состояние, являющееся потомком состояния «бумага». С новым состоянием связываются критерии выбора, введенные пользователем. Новое состояние выступает в роли виртуальной базы данных, подвергая исходную базу данных "фильтрации" в соответствии с заданными критериями выбора. Когда к новому состоянию посылается запрос об определенных позициях ведомости со сведениями о бумаге, то выдается информация только о тех позициях, которые удовлетворяют критериям выбора. Это станет болee ясно, если рассмотреть пример.
Пусть в самом верхнем состоянии (т.e. в состоянии «бумага») имеются позиции базы данных с цветами голубой, красный, белый и бежевый. IIoльзователь пишет запрос, в котором указывает, что хочет просмотреть сведения только о бумаге красного цвета В результате этого запроса порождается к состояние-потомок состояния «бумага», названное, к примеру, «красная .бумага». Новое состояние «красная—бумага» содержит критерии выбора, согласно которому атрибут цвета должен иметь значение (" красный». Эта ситуация показана на рис. 6,7:

Предположим, что пользователь адресует запрос к состоянию «красная бумага», указывая при этом на необходимость получения сведений только о бумаге с гладкой поверх-ностью. В результате данного запроса образуется состояние «гладкая_крас-ная__бумага», порождаемое состоянием «красная_бумага». Состояние «гладкая_красная_бумага» содержит критерий выбора, в соответствии с которым атрибут, характеризующий поверхность бумаги, должен иметь значение «гладкая''). Это новое состояние наследует все критерии выбора своих состояний-предков, так что если пользователь захочет просмотреть позиции ведомости, обратившись к состоянию «гладкая_красная_бумага», то на печать будут выданы сведения только о гладкой красной бумаге.
Состояния образуют "историю" сеанса работы
Каждое состояние ограничивает базу данных, связанную со своим родителем, в соответствии с критериями выбора состояния. После того как пользователь введет несколько запросов во время сеанса работы с программой, дерево образованных состояний будет отражать, если так можно выразиться, "историю" сеанса. Процедура "отобразить состоя-ния" показывает все существующие состояния, а процедура "характер" отображает все критерии выбора, связанные с заданным состоянием. Эти процедуры облегчают пользователю написание нового запроса, позволяющего сузить множество ответов предыдущего запроса.
