Страница 96
Persons is_a {frame};
Friends is_a Persons restr_by (>={Петр, Иван} );
определяют, что элементами типа Friends являются элементы типа Persons, включающие в себя, по крайней мере, два указанных явно элемента.
Обработка сложно структурированных данных во внешней памяти является отличительным свойством всех ЯПЗ. Но помимо этого нужны и «обычные» переменные. Вот почему в ЯПЗ PILOT/2 введены регистры и стеки. Семантика регистров такая же, как у простых переменных традиционных языков программирования. Иначе обстоит дело со стеками. Для явной спецификации поведения стеков в ЯПЗ PILOT/2 введены префиксы и постфиксы, которые являются одноместными операторами, аналогичными по синтаксису унарным операторам (++) и (--) современных языков программирования. Семантика их зафиксирована в табл. 7.1. Одна и та же переменная, в зависимости от наличия или отсутствия префикса (постфикса), трактуется либо как регистр, либо как стек. Для выделения имен переменных в текстах PILOT-программ им предшествует символ «$».
Таблица 7.1.
Семантика переменных в языке PILOT/2
Стековые переменные
GET-переменные
PUT-переменные
Слева
Справа
Взять с сохранением
<
>
Взять без сохранения
<<
>>
Добавить новое значение
>>
<<
Заменить верхушку на новое значение
>
<
Ядром декларативного представления данных и знаний в ЯПЗ PILOT/2 является спецификация баз — временных и постоянных. Все базы в ЯПЗ PILOT/2 фреймовые и поддерживаются на этапе выполнения продукционных программ специализированным пакетом FRAME/2 [Sherstnew et al, 1994].
Спецификация временной базы предполагает, что определенные здесь фреймы имеют «время жизни», совпадающее с периодом выполнения PILOT-програм-мы, а ее имя — встроено в систему и не может быть изменено. Типичный пример определения временной базы — следующий:
base = { спецификация-фрейма, ..., спецификация-фрейма };
Иначе обстоит дело с постоянными базами. Их «время жизни» никак не связано с конкретной PILOT-программой, а имена выбирает сам пользователь. Такие базы могут создаваться и/или использоваться в данной PILOT-программе. Примерами определения постоянных баз могут быть следующие спецификации:
base system = { фрейм-1..... фрейм-N };
extern base person = { фрейм-1, фрейм-2, фрейм-3 };
base new;
base ( a1, a2, ... aN ) = { фрейм-1, фрейм-2..... фрейм-L };
И в случае временных, и в случае постоянных баз основным элементом определения является спецификация фрейма:
спецификация-фрейма ::= || спецификация-прототипа ||
|[спецификация-экземпляра ||
спецификация-прототипа ::= [ имя-фреймаis_a prototype
{{; спецификация-демона }} {{; декларация-слота }}]
спецификация-экземпляра ::= [
|| имя-фрейма || is_a имя-фрейма
|| ( имя-фрейма {{ , имя-фрейма }} ) ||
{{;спецификация-демона}} {{;спецификация-слота }}]
спецификация-слота : : =
|| || имя-слота || = значение | |
|| || ( имя-слота {{, имя-слота }} ) || | |
|| without имя-слота {{, имя-слота }} ||
|| декларация-слота ||
декларация-слота ::= || имя-слота || тип
|| ( имя-слота {{ , имя-слота }} ) ||
{{ ; дополнительная-спецификация }}
дополнительная-спецификация ::= || спецификация-демона ||
|| спецификация-умолчания ||
| | спецификация-ограничения ||
спецификация-демона ::= | | if_added || имя-демона ( )
|| if_deleted ||
|| if_changed ||
спецификация-умолчания ::= by_default значение
спецификация-ограничения ::= restr_by спецификатор
Из этих определений следует, что ЯПЗ PILOT/2 является сильно типизированным языком и, следовательно, обеспечивает строгую проверку правильности использования типов на этапе трансляции. Такой подход повышает надежность проектирования продукционных программ и увеличивает их эффективность.
Обсуждение Базы знаний интеллектуальных систем
Комментарии, рецензии и отзывы