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