- •Глава 6 представление знаний
- •6.1. Представление знаний при помощи пролога
- •Исчисление предикатов
- •Вычислительные формализмы
- •Пролог как вычислительный формализм
- •Формальный смысл
- •Внешний смысл
- •Обманчивая природа внешнего смысла
- •Представление знаний при помощи языка Си
- •Расширение языка Пролог
- •Другие вычислительные формализмы
- •6.2. Семантические сети Узлы и дуги
- •Семантическая сеть как Пролог-программа
- •6.3. Фреймы Представление знаний о ситуациях
- •Наследование значений слотов
- •Оценка формализма фреймов
- •Реализация фрейм - программы на Прологе
- •Запрет наследования
- •6.4. Объектно-ориентированное программирование Объекты и сообщения
- •Наследование
- •Объектно-ориентированное программирование в терминах абстрактных типов данных
- •Объектно-ориентированное программирование в терминах формализма фреймов
- •6.5. Механизм наследования в прологе Наследование в других формализмах
- •Наследование в Прологе
- •Состояния знаний
- •Обзор механизма наследования
- •Создание дерева состояний
- •Процедура "послать"
- •Опровержение фразы
- •Концепции механизма наследования
- •Пример с собранием
- •Пример с птицами
- •Реализация процедуры "послать"
- •Алгоритм работы процедуры "послать"
- •6.6. Программа, выполняющая запросы к базе данных
- •Состояния как виртуальные базы данных
- •Использование процедуры "з"
- •Опрос базы данных (добавление нового состояния)
- •Процедура "отобразитьсостояния"
- •Полезные свойства программы, выполняющей запросы к базе данных
- •Реализация программы, выполняющей запросы
- •Процедура "отобразить"
- •Процедура "з"
- •Процедура "характер"
- •6.7. Описание изменений базы данных
- •Мир кубиков
- •Картина состояния
- •Внесение изменений в базу данных при помощи процедуры "поместить"
- •Реализация процедуры "поместить"
- •Оценка механизма наследования
- •Процедура "послать" как предикат метаязыка
- •Библиографические заметки
- •Упражнения
Пример с собранием
Для разъяснения данных положений целесообразно посмотреть, как можно воспользоваться механизмом наследования для реализации простых примеров, приведенных ранее в данной главе. Ниже дается версия программы для примера с собранием. У состояния «собрание» имеются два потомка (т.е. порожденных состояния): «собрание_38», наследующее от состояния «собрание» умалчиваемое значение времени проведения собрания, и «собрание_39», в котором задается свое собственное время.
% дерево состояний:
порождение (собрание, мероприятие).
порождение (собрание_38, собрание).
порождение (собрание_39, собрание).
% фразы, относящиеся к состоянию "собрание":
время (собрание, 'Среда 14.00').
место (собрание, 'Зал заседаний').
% фразы, относящиеся к состоянию "собрание_38":
присутствуют (собрание_38, [рональд, синли, фред]).
% фразы, относящиеся к состоянию "собрание_39":
тема (собрание_39, 'версия 3.0').
присутствуют (собрание_39, [марта, рональд, спнди]).
Опровергнуть (собрание_39, премя (собряние,_ )).
время (собрание ,39, 'Четверг 9.00') .
Обратите внимание на то, что значение времени, наследуемое из состояния «собрание», опровергается а состоянии «собрание_39». Это опровержение предохраняет состояние «собрание_39» от появления двух противоречащих друг другу значений времени проведения собрания. Заметьте также, что все приведенные фразы свободны от побочных эффектов управления.
Каким образом можно было бы употребить процедуру "послать" для того, чтобы узнать время проведения «собрания_39»? Не могли ли бы Вы написать правило, аргументом которого служит название собрания и которое выдает на печать всю имеющуюся информацию об этом собрании?
Пример с птицами
Приведем версию программы, отражающую структуру примера с птицами.
% дерево состояний:
порождение (канарейки, птицы).
порождение (пингвины, птицы).
% фразы, относящиеся к состоянию "птицы":
способ_передвижения (птицы, полет).
% фразы, относящиеся к состоянию "канарейки":
цвет (канарейки, желтый).
% база данных, описывающая отдельных канареек:
индивидуум (канарейки, твити),
индивидуум (канарейки, стив).
% фразы, относящиеся к состоянию "пингвины":
цвет (пингвины, 'черный и белый') .
опровергнуть (пингвины, способ_передвижения (птицы, _)).
Способ_передвижения (пингвины, ходьба_вразвалочку).
% база данных, описывающая отдельных пингвинов:
индивидуум (пингвины, ральф).
Нижеследующий запрос найдет всех птиц, способ передвижения которых -«ходьба вразвалочку»:
| ?— порождение (Потомок, птицы),
поспать (Потомок, способ— передвижения (ходьба—вразвалочку)),.
послать (Потомок, индивидуум (И)) .
Потомок = пингвины
И = ральф;
нет
Подцель "порождение" генерирует состояние-кандидат, являющееся потомком состояния «птицы». Вторая подцель проверяет, является ли способ передвижения для состояния-кандидата ходьбой вразвалочку Если это так, то третья подцель генерирует всех индивидуумов, связанных с данным состоянием. Приведенный запрос может производить поиск с возвратом, проходя через все состояния - потомки, порожденные состоянием «птицы».