Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 10
На сайте нет зарегистрированных пользователей

Пользователей: 13,362
новичок: uvapke
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Метод половинного деления для нахождения корня уровнения на Turbo Pascal...
Информационная система - продуктовый магазин на Turbo Pascal (База данны...
Моделирование работы узла коммутации сообщений на GPSS + Пояснительная з...

Механизм наследования в Прологе


Формализм фреймов допускает, чтобы значения слотов фрейма общего вида наследовались конкретным фреймом. Наследование можно запретить, если ввести значение слота в конкретный фрейм, при этом наследуемое значение слота будет перекрыто .
Наследование в Прологе. До сих пор в данном разделе рассматривались неуниверсальные способы реализации механизма наследования при помощи языка Пролог. Так, в примере с собранием наследование осуществлялось посредством процедуры:

% локальное правило
собрание_38 (Атрибут, Значение) :-
с_38 (Атрибут, Значение), !.

% правило наследования
собрание_38 (Атрибут, Значение) :-
разновидность(с_38, Фрейм),
подцель = ..[Фрейм, Атрибут, Значение],
подцель.




Такой подход приводит к искаженному отображению структуры представляемой системы. Ему к тому же свойственны два ограничения:
1) он применим только к базам данных, информация в которых хранится в виде атрибутов, представленных в форме «фрейм (Атрибут, Значение)»;
2) применение предиката "сократить" в первом правиле не дает возможности употребить в правиле "собрание_38" более одного локального значения атрибута. Было бы желательным иметь общий механизм описания наследования в Прологе, свободный от этих ограничений.
Наследование можно трактовать как разновидность вывода, выполняемого между состояниями знаний. Дадим полную интерпретацию символических обозначений для примера с собранием. Предположим, что еженедельные собрания, в которых участвуют Роман, Анна и Борис, проводятся регулярно по средам в 14.00. Можно сказать, что среда 14.00 - это умалчиваемое время проведения еженедельных собраний, в которых принимают участие эти лица. Когда первоначально планировалось еженедельное собрание "собрание_38", то все его участники предполагали, что оно будет проведено в обычное время. В среду утром, однако, Борис узнает, что он должен уехать после обеда, и поэтому просит перенести "собрание_38". Участники собрания соглашаются перенести его на четверг на 9.00. Перенос срока проведения собрания привел к изменению состояния знаний этих людей о еженедельном собрании. В новом состоянии знаний умалчиваемое время проведения собрания перекрывается новым значением времени.
При представлении этой ситуации с помощью фреймов состояния знаний о ней (до и после действий Бориса) задаются в неявном виде. Представление ситуации станет более четким, если состояния знаний будут выражены в явной форме. Этого можно будет добиться, если присвоить имена состояниям знаний и добавить в каждое отношение, входящее в представление, дополнительный параметр, который будет связывать отношение с тем состоянием, в котором это отношение имеет место. Отношение между состояниями знаний также должно быть выражено явно. Тогда наследование информации от общего состояния знании к конкретному состоянию знаний можно будет реализовать при помощи процедуры общего назначения.
В оставшейся части данного раздела рассматриваются реализация и применение универсального механизма наследования, написанного на языке Пролог. Механизм основывается на явных ссылках к состояниям знаний. Он даст возможность программисту представлять структуру систем, в которых существует наследование (например, "собрание"), без необходимости использовать побочные эффекты управления во фразах, ориентированных на конкретное применение. Данный механизм является расширением обрабатывающей структуры Пролога, которое должно усилить выразительную силу языка.
Обзор механизма наследования. Механизм наследования - это метод представления многих состояний знаний, при котором конкретное состояние может наследовать информацию от общего состояния. Фраза ставится в соответствие состоянию путем добавления имени состояния в заголовок фразы (в виде первого ее аргумента); все остальные аргументы не изменятся. Отношение между общим и конкретным состояниями записывается в виде факта "порождение/2". Наследование фраз от состояния к состоянию реализуется процедурой "послать". С декларативных позиций процедуру "послать" можно трактовать как отношение, существующее между состоянием знаний и запросом, если можно доказать истинность запроса по фразам, связанным с данным состоянием.
Главной аналитической задачей при использовании механизма наследования является установление иерархии состояний знаний. Взаимосвязь состояний можно рассматривать как дерево, в котором каждое состояние представляется узлом. Пусть имеются два состояния, А и Б. Если состояние Б - это узел дерева, порожденный состоянием А, то Б унаследует все фразы, связанные с А, за исключением тех, которые явно опровергаются в Б.
Предположим, что самым верхним состоянием конкретного дерева является состояние «служащие». Оно содержит информацию, в целом применимую по отношению ко всем служащим, такую как места расположения отделов, имена менеджеров отделов и т.д. У состояния «служащие» есть два порожденных им состояния - «служащие, получающие оклад» и «служащие, работающие по контракту». Состояние «служащие, получающие оклад» содержит базу данных, в которой хранятся сведения об именах служащих, получающих оклад, и иную информацию, например данные о виде налоговой ведомости, которую эти служащие получают в конце года. Состояние «служащие, работающие по контракту» содержит базу данных со сведениями об именах служащих, работающих по контракту, и иную относящуюся к этим служащим информацию. Данное дерево состояний изображено на рис. 3.3:

Механизм наследования в Прологе
Рис. 3.3

Создание дерева состояний. Отношение двух состояний описывается в базе данных "порождение". Для того чтобы реализовать приведенный выше пример в виде программы, нужно, чтобы один факт "порождение" свидетельствовал о том, что состояние «служащие, получающие оклад» порождено состоянием «служащие», а другой факт говорил о том, что и состояние «служащие, работающие по контракту» является порождением состояния «служащие». Связь фразы Пролог-программы с определенным состоянием устанавливается благодаря введению дополнительного аргумента, содержащего имя состояния.
Приведем версию программы для примера со служащими.

% дерево состояний:
порождение (на_окладе, служащие).
порождение (по_контракту, служащие) .

% фразы, связанные с состоянием "служащие":
% Состояние Отд. Расположение
расположение_отдела( служащие, 100, 'Флигель 2-й этаж').
расположение_отдела ( служащие, 200, 'Здание 4073').

% Состояние Отд. Менеджер
менеджер_отдела ( служащие, 100, иванов).
менеджер_отдела ( служащие, 200, романов).

% собрание всех служащих отдела 100:
собрание_отдела (служащие, 100, 'Вт 22.01 Комната 235').

% фразы, связанные с состоянием "на_окладе":
% Состояние Имя Отд. Оклад
служ ( на_окладе, слонов, 100, 55000).
служ ( на_окладе, ливанов, 100, 40000).
служ ( на_окладе, антонов, 200, 35000).

% Состояние Форма
налогов_ведомость ( на_окладе, 2).

% собрание только для служащих отдела 100, получающих
% оклад:
собрание_отдела (на_окладе, 100, 'Пн 21.01 Комната 201').

% фразы, связанные только с состоянием "по_контракту":
% Состояние Имя Отд. Оклад
служ(по_контракту, алексей, 100, неприменим).
служ (по_контракту, виктор, 200, неприменим).
% Состояние Форма
налогов_ведомость ( по_контракту, 1099).




Процедура "послать". Наследование фраз от состояния к порожденным им состояниям реализуется процедурой "послать". У этой процедуры два аргумента - имя состояния, к которому обращен запрос, и Пролог-запрос, в котором отсутствует аргумент, обозначающий имя состояния. Нижеследующий вызов процедуры "послать" запрашивает номер формы налоговой ведомости, которую следует выдать служащим, работающим по контракту:

?- послать (по_контракту, налогов_ведомость (Форма)).
Форма = 1099 ;
нет




Обратите внимание на то, что процедура "послать" смогла найти только один ответ на запрос «налогов__ведомость(Форма)». В следующем вызове процедуры "послать" задается вопрос о менеджере служащих, работающих в отделе 100 по контракту. Из ответа видно, что состояние «по_контракту» наследует фразы от состояния «служащие».

?- послать (по_контракту, менеджер_отдела (100, Кто)).
Кто = иванов ;
Нет




Переадресация запроса. Если процедура "послать" не может решить запрос в соответствии с фразами заданного состояния, она переадресует этот запрос к порождающему состоянию. Если запрос потерпит повторную неудачу в порождающем состоянии, то процедура "послать" переадресует его к порождающему состоянию еще более высокого уровня. Этот процесс может продолжаться до тех пор, пока не будет достигнуто порождающее состояние самого высокого уровня.
Нижеследующий запрос спрашивает о собраниях, в которых должны принять участие все служащие отдела 100, получающие оклад. Данный пример показывает, что процедура "послать" может вырабатывать ответы на основании информации, получаемой более чем из одного состояния.

?- послать (на_окладе, собрание_отдела (100, М)).
М = 'Пн 21.0] Комната 201' ; % по состоянию "на_окладе"
М =• Вт 22.01 Комната 235' % по состоянию "служащие"




Опровержение фразы. Предположим, что компания в качестве поспешной дискриминационной меры решает переместить в подвальное помещение флигеля всех служащих отдела 100, работающих по контракту. Это равнозначно изменению структуры системы, что потребует надлежащею изменения описания системы. Такое изменение можно осуществить при помощи деструктивного перекодирования соответствующих баз данных. Но есть и другой способ внесения изменений, при котором существующие базы данных будут затронуты в минимальной мере. Для этого нужно добавить к состоянию «по_контракту» новый факт «расположение_отдела» и опровергнуть старый факт:

расположение_отдела (по_контракту, 100, 'Подвал флигеля').
опровергнуть (по_контракту,
расположение_отдела (служащие, 100, 'Флигель 2-й этаж')).




Состояние «по_контракту» - это состояние, для которого осуществляется опровержение, а фраза «расположение_отдела (служащие, 100, 'Флигель 2-й этаж')» - это опровергаемая фраза. После того как в Прог¬рамму будут добавлены приведенные выше фразы, при просьбе выдать место расположения отдела 100, адресованной к состоянию «по_контракту», будет выводиться новое значение:

?- послать (по_контракту, расположение_отдела (100, Р)).
Р = 'Подвал флигеля ;
нет;




Но по требованию выдать ту же самую информацию, адресованному к состоянию «служащие», все еще будет вырабатываться старое значение:

?- послать (служащие, расположение_отдела:(100,Р))
Р = 'Флигель 2-й этаж ;
нет




Если фраза опровергнута для конкретного состояния, то она больше не будет наследоваться ни этим состоянием, ни любыми другими порожденными им состояниями Если же к состоянию была бы добавлена новая фраза, то она стала бы наследоваться всеми ею порожденными состояниями. Описанное употребление факта "опровергнуть" значительно облегчает сопровождение программы.
Концепции механизма наследования. Механизм наследования базируется на следующих ключевых концепциях:
1) иерархия состояний знаний;
2) наследование фраз or состояния к состоянию и
3) отмена наследования фразы путем ее опровержения.
Концепции формализма фреймов так соответствуют приведенным выше концепциям:
- фрейм соответствует состоянию знаний;
- слот соответствует фразе, относящейся к состоянию знаний;
- наследование значений слотов от фрейма к фрейму соответствует наследованию фраз от состояния к состоянию;
- способность локального значения слота перекрывать наследуемое значение слота соответствует возможности опровергнуть унаследованную фразу и заменить ее новой фразой.
Пример с собранием. Для разъяснения данных положений целесообразно посмотреть, как можно воспользоваться механизмом наследования для реализации простых примеров, приведенных ранее в данной главе. Ниже дастся версия программы для примера с собранием. У состояния «собрание» имеются два потомка (т.е. порожденных состояния): «собрание_38», наследующее от состояния «собрание» умалчиваемое значение времени проведения собрания, и «собрание_39», в котором задается свое собственное время.

% дерево состояний:
порождение (собрание, мероприятие).
порождение (собрание_38, собрание).
порождение (собрание_39, собрание).

% фразы, относящиеся к состоянию "собрание":
время (собрание, 'Среда 14.00').
место (собрание, 'Зал заседаний').

% фразы, относящиеся к состоянию " собрание_39":
присутствуют(собрание._38, [роман, анна, борис]).

% фразы, относящиеся к состоянию "собрание_39"
тема (собрание_39, 'версия 3.0').
присутствуют (собрание_39, [марта, роман, анна]).
опровергнуть(собрание_39, время (собрание, _))
время (собрание_39, 'Четверг 9.00' ).




Обратите внимание на то, что значение времени, наследуемое из состояния «собрание», опровергается в состоянии «собрание_39», Это опровержение предохраняет состояние «собрание_39» от появления двух противоречащих друг другу значений времени проведения собрания. Заметьте также, что все приведенные фразы свободны от побочных эффектов управления.
Опубликовал Kest October 16 2010 16:46:05 · 0 Комментариев · 8266 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
С. Г. Горнаков - ...
C++ для начинающих
Progressbar
Работа с матрицами
AntiRus
100 компонентов о...
Delphi 6. Учебный...
Работа с базами д...
IPAddresseEdit
netBIOS
Архив значков
Delphi 6/7 базы д...
WAP версия сайта
Error mod
Добавление басса ...
Ведение справочны...
DeleteEdit
Run
Printgrid
Сложный калькулятор

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97829
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10290
Turbo Pascal fo... 7373
Калькулятор [Ис... 5981
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Деление неупакован...
Проверка грамматик...
Замена защитного э...
Разработка табличн...
Прерывание и его в...
Лицензия на рестав...
Обращение к файлу ...
Примеры правил - и...
Внимание
Взаимодействие ком...
Этап идентификации
Датчики магнитного...
Представление дере...
Игровые автоматы с...
Видео в Интернете ...
Практика
Листинг 9.2. После...
Настройки обсуждения
8.7. Задачи
Определяя переменн...
Решение заключаетс...
Информационные и с...
Вычисление чисел Ф...
Сколько изображени...
Программа считывае...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?