Самая старая модель, предложенная американским Марвином Минским в 1975 г. Для представления и описания стереотипных ситуаций и объектов. По определению Минского, фрейм - минимальная структура информации, необходимая для представления класса объектов, явлений, процессов.
В наиболее общем виде фрейм - конструкция следующего вида:
{имя_фрейма, (имя_слота1, значение_слота1, [<имя присоединенной процедуры >], ….) }
фрейм - прототип - интенсиональное описание (аналог структурного шаблона в С) и фрейм - экземпляр (заполненной конкретной информацией) - экстенсиональное описание (аналог структурной переменной в С).
Фреймы можно объединить в сети по иерархическому принципу (для этого используются слоты с именами AKO – для ссылки на вышестоящий, INSTANCE – для ссылки на нижестоящий уровень).
Горизонтальные связи образуются при использовании в качестве данных стек других слотов с соответствующей пометкой.
Во фреймовых системах впервые была реализована идея использования присоединённых к конкретным данным процедур. Процедуры могут запускаться автоматически либо при любом обращении к данным, либо привыполнении определённых условий или совершения определённых действий.
В СИИ работающих на фреймах можно выделить несколько типовых процессов:
1) В создании фрейм экземпляров и наполнении их информацией;
2) Активизация фреймов. В случае, если фрейм считается подходящим к данной ситуации, осуществляется его активизация к глобальным процессам. Если фрейм не достаточно соответствует ситуации, он может содержать ссылки на другие нужные.
3) Организация вывода, последовательный поиск и организация фреймов обработки. Выполняется также глобальным процессом.
Существует большое количество фреймовых языков. Большая часть базируется на LISPе (LISP – язык обработки списков). В качестве примера рассмотрим некоторые конструкции языка.
FRL – язык представления фреймов.
F – фрейм;S – слот; A – аспект.
Есть зарезервированные аспекты
$ VALUE <…> - значение;
$ DEFAULT <…> - значение по умолчанию;
$ IF_ADDED(имя присоединённой процедуры(параметры)) – запускается при добавлении значения.
Данные тоже список.
(D <имя комментария> : <комментарий>) (…)
Фрейм
(Яблоко *1
(сорт
($ VALUE (антоновка))
)
(вкус
($ VALUE
(кислый (когда: лето))
(кисло-сладкий (когда: осень))
)
…
|