- •Глава 6 представление знаний
- •6.1. Представление знаний при помощи пролога
- •Исчисление предикатов
- •Вычислительные формализмы
- •Пролог как вычислительный формализм
- •Формальный смысл
- •Внешний смысл
- •Обманчивая природа внешнего смысла
- •Представление знаний при помощи языка Си
- •Расширение языка Пролог
- •Другие вычислительные формализмы
- •6.2. Семантические сети Узлы и дуги
- •Семантическая сеть как Пролог-программа
- •6.3. Фреймы Представление знаний о ситуациях
- •Наследование значений слотов
- •Оценка формализма фреймов
- •Реализация фрейм - программы на Прологе
- •Запрет наследования
- •6.4. Объектно-ориентированное программирование Объекты и сообщения
- •Наследование
- •Объектно-ориентированное программирование в терминах абстрактных типов данных
- •Объектно-ориентированное программирование в терминах формализма фреймов
- •6.5. Механизм наследования в прологе Наследование в других формализмах
- •Наследование в Прологе
- •Состояния знаний
- •Обзор механизма наследования
- •Создание дерева состояний
- •Процедура "послать"
- •Опровержение фразы
- •Концепции механизма наследования
- •Пример с собранием
- •Пример с птицами
- •Реализация процедуры "послать"
- •Алгоритм работы процедуры "послать"
- •6.6. Программа, выполняющая запросы к базе данных
- •Состояния как виртуальные базы данных
- •Использование процедуры "з"
- •Опрос базы данных (добавление нового состояния)
- •Процедура "отобразитьсостояния"
- •Полезные свойства программы, выполняющей запросы к базе данных
- •Реализация программы, выполняющей запросы
- •Процедура "отобразить"
- •Процедура "з"
- •Процедура "характер"
- •6.7. Описание изменений базы данных
- •Мир кубиков
- •Картина состояния
- •Внесение изменений в базу данных при помощи процедуры "поместить"
- •Реализация процедуры "поместить"
- •Оценка механизма наследования
- •Процедура "послать" как предикат метаязыка
- •Библиографические заметки
- •Упражнения
Использование процедуры "з"
Интерфейс этой программы является таблично-управляемым. Пользователь опрашивает базу данных при помощи процедуры "з". У процедуры "з" имеется два аргумента: имя существующего состояния и имя со стояния, которое следует образовать в качестве потомка текущего со стояния. Процедура "з" выводит таблицу, состоящую из имен всех атрибутов базы данных, в которой хранятся сведения о бумаге. Если для атрибута уже установлен критерий выбора в существующем состоянии, то этот критерий автоматически печатается в надлежащем слоге таблицы, Если критерий выбора для атрибута не был установлен, то ничего не печатается, и пользователь может ввести этот критерий. Если же пользователь вместо ввода критерия нажмет клавишу возврата каретки, то по отношению к данному атрибуту не будут применяться критерии выбору
База данных со сведениями о бумаге
В базе данных со сведениями о бумаге имеется пять атрибутов, описывающих марку, вес, цвет, поверхность бумаги и ее тип (указывается, поступает ли бумага в виде листов или в виде рулонов). Вот эта б>п;1 данных:
% Состояние Тип Марка .Вес Поверхн. Цвет
вед_бум (бумага, листы, непрозрачная, 60, гладкая, голубой).
вед_бум (бумага, листы, непрозрачная, 45, матовая, зеленый)
вед_бум (бумага, листы, индексная, 50, матовая, красный).
вед_бум (бумага, листы, непрозрачная, 70, глянцевая, белый).
вед_бум (бумага, рулоны, непрозрачная, 100, гладкая, бежевый)
вед_бум (бумага, рулоны, индексная, 70, глянцевая, красный).
вед_бум (бумага, рулоны, непрозрачная, 110, гладкая, голубой).
вед_бум (бумага, рулоны, офсетная, 160, глянцевая, красный)
Процедура "отобразить" выводит все позиции ведомости, связанные с нужным состоянием. Эта процедура имеет один аргумент - имя состояния.
| ?— отобразить (бумага).
листы непрозрачная 60 гладкая голубой
листы непрозрачная 45 матовая зеленый
листы индексная 50 матовая красный
листы непрозрачная 70 глянцевая белый
рулоны непрозрачная 100 гладкая бежевый
рулоны индексная 70 глянцевая красный
рулоны непрозрачная 110 гладкая голубой
рулоны офсетная 160 глянцевая красный
да
Опрос базы данных (добавление нового состояния)
Для добавления нового состояния с именем « красная_рулоны » , которое должно располагаться под состоянием «бумага» и содержать все позиции ведомости, описывающие красную бумагу в рулонах, пользователь должен ввести следующий запрос:
% Существует Новое
| ? - з (бумага, красная_рулоны).
С состоянием « бумага » не связано никаких критериев выбора, поэтому программа подсказывает пользователю, что можно ввести значения всех пяти атрибутов.
тип? рулоны
марка?
вес?
цвет? красный
поверхность?
Пользователь ввел значение «рулоны» в ответ на подсказку {{тип?}}, значение « красный » в ответ на подсказку «цвет? » и нажал клавишу возврата каретки в ответ на остальные сообщения-подсказки. В результате данного обращения к процедуре "з" образуется новое состояние « красная_рулоны » как потомок состояния « бумага » . Пользователь может исследовать это состояние при помощи процедур "отобразить" и "характер".
| ?— отобразить (красная_рулоны) .
бумага рулоны индексная 70 глянцевая красный
бумага рулоны офсетная 160 глянцевая красный да
| ?- характер (красная—рулоны).
тип: рулоны марка:
вес:
цвет: красный поверхность:
да
Добавление состояния {{ тяжелая— красная -.рулоны »
Предположим, что пользователь опять решил применить процедуру "з" для поиска позиций ведомости, в которых содержатся сведения о красной рулонной бумаге веса 160. При этом будет образовано новое состояние «тяжелая _красная„рулоны)), являющееся потомком порождающего состояния « красная „рулоны)).
%
| ?- з(красная_рулоны, тяжелая_красная_рулоны) .
тип? рулоны
марка?
вес? 160
цвет? красный
поверхность?
Поскольку состояние «тяжелая_красная_рулоны» наследует все значения атрибутов, установленные для состояния «красная_рулоны » , процедура "з" не запрашивает у пользователя данных о марке и цвете бумаги. Вместо этого она отображает значения этих атрибутов, которые были установлены ранее для состояния «красная_рулоны». Пользователь ввел значение 160 в ответ на подсказку «вес?» и нажал на клавишу возврата каретки в ответ на два других сообщения-подсказки.
| ?— отобразить (тяжелая_красная_рулоны).
бумага рулоны офсетная 160 глянцевая красный да
| ?— характер (тяжелая_красная_ рулоны) .
тип: рулоны марка:
вес: 160 цвет: красный поверхность:
да