- •Глава 6 представление знаний
- •6.1. Представление знаний при помощи пролога
- •Исчисление предикатов
- •Вычислительные формализмы
- •Пролог как вычислительный формализм
- •Формальный смысл
- •Внешний смысл
- •Обманчивая природа внешнего смысла
- •Представление знаний при помощи языка Си
- •Расширение языка Пролог
- •Другие вычислительные формализмы
- •6.2. Семантические сети Узлы и дуги
- •Семантическая сеть как Пролог-программа
- •6.3. Фреймы Представление знаний о ситуациях
- •Наследование значений слотов
- •Оценка формализма фреймов
- •Реализация фрейм - программы на Прологе
- •Запрет наследования
- •6.4. Объектно-ориентированное программирование Объекты и сообщения
- •Наследование
- •Объектно-ориентированное программирование в терминах абстрактных типов данных
- •Объектно-ориентированное программирование в терминах формализма фреймов
- •6.5. Механизм наследования в прологе Наследование в других формализмах
- •Наследование в Прологе
- •Состояния знаний
- •Обзор механизма наследования
- •Создание дерева состояний
- •Процедура "послать"
- •Опровержение фразы
- •Концепции механизма наследования
- •Пример с собранием
- •Пример с птицами
- •Реализация процедуры "послать"
- •Алгоритм работы процедуры "послать"
- •6.6. Программа, выполняющая запросы к базе данных
- •Состояния как виртуальные базы данных
- •Использование процедуры "з"
- •Опрос базы данных (добавление нового состояния)
- •Процедура "отобразитьсостояния"
- •Полезные свойства программы, выполняющей запросы к базе данных
- •Реализация программы, выполняющей запросы
- •Процедура "отобразить"
- •Процедура "з"
- •Процедура "характер"
- •6.7. Описание изменений базы данных
- •Мир кубиков
- •Картина состояния
- •Внесение изменений в базу данных при помощи процедуры "поместить"
- •Реализация процедуры "поместить"
- •Оценка механизма наследования
- •Процедура "послать" как предикат метаязыка
- •Библиографические заметки
- •Упражнения
6.5. Механизм наследования в прологе Наследование в других формализмах
Формализм фреймов допускает, чтобы значения слотов фрейма общего вида наследовались конкретным фреймом. Наследование можно запретить, если ввести значение слота в конкретный фрейм, при этом наследуемое значение слота будет перекрыто. Сходным образом объектно-ориентированный формализм допускает, чтобы сообщения (и связанные с ними методы) общего класса наследовались конкретным классом. Наследование будет отменено, если для конкретного класса будет определено сообщение, перекрывающее наследуемое сообщение. Концепция наследования придает этим формализмам большую выразительную силу при представлении таксономии знаний и, говоря словами Ковальски, "...побуждает нас... к рассуждениям путем сравнения новых случаев с принятыми ранее стереотипами" [58, с. 4].
Наследование в Прологе
До сих пор в данной главе рассматривались неуниверсальные способы реализации механизма наследования при помощи языка Пролог. Так, во втором примере с собранием наследование осуществлялось посредством процедуры:
% локальное правило
собрание_38 (Атрибут, Значение) :—
с_38 (Атрибут, Значение), !.
% правило наследования
собрание_38 (Атрибут, Значение) :—
разновидность (с_38, Фрейм),
Подцель = . . [Фрейм, Атрибут, Значение],
Подцель.
Такой подход приводит к искаженному отображению структуры представляемой системы. Ему к тому же свойственны два ограничения:
1) он применим только к базам данных, информация в которых хранится в виде атрибутов, представленных в форме ({Фрейм (Атрибут, Значение)}}; и 2) применение предиката "сократить" в первом правиле не дает возможности употребить в правиле "собрание_38" более одного локального значения атрибута. Было бы желательным иметь общий механизм описания наследования в Прологе, свободный от этих ограничений.
Состояния знаний
Согласно Хейесу [40, с. 54—56] наследование можно трактовать как разновидность вывода, выполняемого между состояниями знаний. Для того чтобы пояснить, что имеет в виду Хейес, дадим полную интерпретацию символических обозначений для примера с собранием. Предположим, что еженедельные собрания, в которых участвуют Рональд, Синди и Фред, проводятся регулярно по средам в 14.00. Можно сказать, что среда 14.00 — это умалчиваемое время проведения еженедельных собраний, в которых принимают участие эти лица. Когда первоначально планировалось еженедельное собрание "собрание_38", то все его участники предполагали, что оно будет проведено в обычное время. В среду утром, однако, Фред узнает, что он должен уехать после обеда, и поэтому просит перенести "собрание_38". Участники собрания соглашаются перенести его на четверг на 9.00. Перенос срока проведения собрания привел к изменению состояния знаний этих людей о еженедельном собрании. В новом состоянии знаний умалчиваемое время проведения собрания перекрывается новым значением времени.
При представлении этой ситуации с помощью фреймов состояния знаний о ней (до и после действий Фреда) задаются в неявном виде. Представление ситуации станет более четким, если состояния знаний будут выражены в явной форме. Этого можно будет добиться, если присвоить имена состояниям знаний и добавить в каждое отношение, входящее в представление, дополнительный параметр, который будет связывать отношение с тем состоянием, в котором это отношение имеет место. Отношение между состояниями знаний также должно быть выражено явно. Тогда наследование информации от общего состояния знаний к конкретному состоянию знаний можно будет реализовать при помощи процедуры общего назначения.
В оставшейся части данной главы рассматриваются реализация и применение универсального механизма наследования, написанного на языке Пролог. Механизм основывается на явных ссылках к состояниям знаний. Он дает возможность программисту представлять структуру систем, в которых существует наследование (например, "собрание''), без необходимости использовать побочные эффекты управления во фразах, ориентированных на конкретное применение. Данный механизм является расширением обрабатывающей структуры Пролога, которое должно усилить выразительную силу языка.