Имя материала: Базы знаний интеллектуальных систем

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 является сильно типизированным языком и, следовательно, обеспечивает строгую проверку правильности использования типов на этапе трансляции. Такой подход повышает надежность проектирования продукционных программ и увеличивает их эффективность.

Страница: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 |