Скачиваний:
24
Добавлен:
01.05.2014
Размер:
356.35 Кб
Скачать

Оценка формализма фреймов

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

Реализация фрейм - программы на Прологе

Нижеследующая Пролог-программа выражает структуру приведенного выше примера СОБРАНИЕ.

разновидность (собрание, мероприятие).

разновидность (собрание_38, собрание).

% локальные значения слотов для фрейма СОБРАНИЕ:

собрание (время, 'Среда 14.00').

собрание (место, 'Зал заседаний').

% локальные значения слотов для фрейма СОБРАНИЕ_38:

собрание_38 (присутствуют, [рональд, синди, фред]) . % (1)

% правило наследования

собрание_38 (Атрибут, Значение) :- %(2)

разновидность (собрание—38, Фрейм),

Подцель = . . [Фрейм, Атрибут, Значение],

Подцель.

Обратите внимание на то, что и "собрание", и "собрание—38" — это базы данных, в которых хранятся атрибуты (см. разд. 2.5). База данных "собрание" связана с базой данных "ообрание_38" при помощи факта «разновидность (собрание—38, собрание)». Правило наследования позволяет "собранию_38" наследовать любые значения атрибутов от "собрания". Если запросить время проведения "собрания_38":

| ?- собрание38 (время, X).

X='Среда 14.00'

то ответ будет получен по факту "собрание" при помощи правила наследования.

Факты, противоречащие друг другу

Представьте себе, что сперва планировалось провести "собрание__38" в принятое по умолчанию время (Среда, 14.00), но потом по какой то причине понадобилось его перенести. Посмотрим, что получится, если в базу данных "собрание_38" добавить атрибут "время", противоречащий уже имеющемуся атрибуту.

Собрание_38 (время, 'Четверг 9.00').

Теперь в слоте "время" фрейма "собрание_38" будут находиться два значения - локальное значение и унаследованное значение;

| ? - собрание_38 (время, X).

Х = ' Четверг 9.00';

X = 'Среда 14.00';

нет

Здесь трудность состоит в том, что "собрание_38" должно описывать реальное собрание, которое может быть проведено только один раз. Иными словами, отношение между собранием и временем его проведения должно регулироваться ограничением вида один-к-одному, обеспечивающие целостность отношения. Однако в данной версии программы запрос Вырабатывает два значения времени проведения собрания. Значение «Четверг 9.00» должно перекрывать умалчиваемое значение «Среда 14.00», так что запрос, подобный приведенному выше, должен вырабатывать только значение «Четверг 9.00».

Соседние файлы в папке Гл.6,7,Прилож.,Допол