KorNet 1.5

А.В. Корочков
Система программирования на основе
языка С++ для работы с моделью данных типа
"семантическая сеть" ("KorNet")

Описание системы (1995)

(См. также KorNet Развитие системы KorNet 1.5)


5.2 Макроязык системы KorNet (часть II)


В описании макрокоманд применяются следующие условные обозначения:

A - первый параметр,
B - второй параметр,
С - третий параметр,
и т.д.

Конкретизация типов параметров приводится в описании макрокоманд,
например, char*.

Некоторые макрокоманды, описываемые ниже, имеют модификацию,
позволяющую проверить значение переменной Result после выполнения
вызываемой в макрокоманде функции системы. Модифицированная форма
имеет дополнительный символ "c" в конце названия макрокоманды и два
дополнительных параметра. Последний в описании модифицированной
макрокоманды параметр задает метку оператора, к которому необходимо
перейти при наличии условия, заданного предпоследним параметром.
Этот параметр может принимать значения goyes и gono. Если задано goyes,
то переход осуществляется при Result==1, если gono - при Result==0.
Базовая и модифицированная формы описываются совместно.

Далее в тексте выражение "сеть A ..." надо понимать как
"сеть (подсеть), начинающаяся с узла A, ...".



delattrf(A,B)
delattrfc(A,B,C,D)

A - node*/fnode*
B - long/char*
C - goyes/gono
D - метка перехода


Удалить атрибут B у узла A. Если значением атрибута является
другой узел и на него нет больше ссылок в сети, то он также
удаляется, что равнозначно удалению сети, начинающейся с этого
узла, т.к. процесс удаления по этой логике будет продолжен
далее вглубь сети (см. также описание delnet). Память, занимаемая
удаляемыми атрибутами и узлами, после их удаления может быть
повторно использована для размещения новых узлов и атрибутов.

Пример:
atom("изобретения",Create);
delattr(Create,"двигатели");

Исходное состояние 1 участка сети до выполнения операции:

"изобретения"    
* (Create)    
|    
| "двигатели"    
\------------------> * (узел)  
| | (0)  
| "шасси" \----------------> * (узел)
\--------> *(узел) | | "фирма"
. | (0) \--------> "ferrari"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "volvo"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "reno"
  \----------------> * (узел)
    | "фирма"
.   \--------> "citroen"




Состояние участка сети после выполнения операции для исходного
состояния 1:

"изобретения"
* (Create)
|
| "шасси"
\--------> *(узел)

.

.

.


Исходное состояние 2 участка сети до выполнения операции:

"изобретения"   "предприятия"
* (Create)   * (узел)
|   |
| "двигатели"   | (0)
\------------------> * (узел)<-------- /
| | (0)  
| "шасси" \----------------> * (узел)
\--------> *(узел) | | "фирма"
. | (0) \--------> "ferrari"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "volvo"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "reno"
  \----------------> * (узел)
    | "фирма"
.   \--------> "citroen"




Состояние участка сети после выполнения операции для исходного
состояния 2:

"изобретения"   "предприятия"
* (Create)   * (узел)
|   |
| "шасси"   | (0)
\--------> *(узел) * (узел)<-------- /
  | (0)  
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "ferrаri"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "volvo"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "reno"
  \----------------> * (узел)
    | "фирма"
.   \--------> "citroen"




delattrs(A)

A - node*/fnode*


Удалить все атрибуты узла A. Действие удаления вглубь сети не
распространяется.


delelem(A,B)
delelemc(A,B,C,D)

A - node*/fnode*
B - long/char*/node*/fnode*
C - goyes/gono
D - метка перехода

Удалить безымянный атрибут узла A, имеющий значение B. Действие удаления
вглубь сети не распространяется.


delelemf(A,B)
delelemfc(A,B,C,D)

A - node*/fnode*
B - long/char*/node*/fnode*
C - goyes/gono
D - метка перехода

Удалить безымянный атрибут узла A, имеющий значение B. Действие удаления
распространяется вглубь сети (см. описание delattrf).


delnet(A)

A - node*/fnode*

Удалить сеть A. Действие удаления распространяется вглубь сети
(см. описание delattrf).


fascribe(A,B)
fascribec(A,B,C,D)

A - node*
B - fnode*
C - goyes/gono
D - метка перехода


Приписать атрибуты узла A из АС узлу B в АСБД.


fascribea(A,B)
fascribeac(A,B,C,D)

A - char*
B - fnode*
C - goyes/gono
D - метка перехода


Приписать атрибуты атома A (атомарного узла) из АС узлу B в АСБД.


fatom(A,B) и deffatom(A,B)

A - char*
B - fnode*

Найти или создать,если его нет, атом A в АСБД и указатель на его
атомарный узел поместить в новую переменную с идентификатором B.
Эта переменная будет иметь тип fnode*.


findelem(A,B)

A - node*/fnode*
B - long/char*/node*/fnode*

Определить (через установку значения Result), имеется ли у узла
A безымянный атрибут со значением B.


findobj(A,B)

A - node*/fnode*
B - long/char*/node*/fnode*

Определить (через установку значения Result), имеется ли у узла
A какой-нибудь (именованный или безымянный) атрибут со значением
B.


firstelem(A,B,C)

См. allelem.


getatom(A,B)
getatomc(A,B,C,D)

A - char*
B - node*
C - goyes/gono
D - метка перехода

Найти атом A в АС и указатель на его атомарный узел
поместить в B. Новый атом не образуется.


getattr(A,B,C)
getattrc(A,B,C,D,E)

A - node*/fnode*
B - long/char*
C - long/char*/node*/fnode*
D - goyes/gono
E - метка перехода

Взять у узла A атрибут B со значением типа C и его значение
записать в C.



getfatom(A,B)
getfatomc(A,B,C,D)

A - char*
B - fnode*
C - goyes/gono
D - метка перехода

Найти атом A в АСБД и указатель на его атомарный узел поместить в
B. Новый атом не образуется.


getfnode(A,B)

A - fnode*
B - long

Получить смещение узла A в АСБД и это значение поместить в ранее
существовавшую переменную с идентификатором B.


getsattr(A,B,C)

A,C - node*/fnode*
B - long/char*

Взять у узла A атрибут B со значением типа C и его значение
записать в C. Если такого атрибута у узла нет, то привесить
узлу A атрибут B с новым значением типа C.


gono(A)

A - метка перехода

При значении переменной Result, равном нулю, перейти к оператору,
помеченному A.



gonol(A,B)

A - идентификатор
B - метка перехода

При значении A, равном нулю, перейти к оператору, помеченному B.


goyes(A)

A - метка перехода

При значении переменной Result, не равном нулю, перейти к
оператору, помеченному A.



goyesl(A,B)

A - идентификатор
B - метка перехода

При значении A, не равном нулю, перейти к оператору, помеченному B.


ifequal(A,B)
ifequalc(A,B,C,D)

A,B - long/char*/node*/fnode*
C - goyes/gono
D - метка перехода


Установить значение Result в зависимости от равенства или
неравенства значений переменных A и B.


loadnet(A,B)

A - fnode*
B - node*

Переписать сеть из АСБД, начинающуюся с узла A, в АС (в ОП).
Указание на головной узел загруженной сети поместить в B.

Пример:
fatom("melodies",fileMelo);
getattr(fileMelo,"classic",Classic);
declnode(ClSongs);
loadnet(Classic,ClSongs);


  1. Модель данных
  2. Реализация сети
  3. Использование системы KorNet
  4. Дополнительные программы
    4.1 Интерфейсная программа TVDianet
    4.2 Интерфейсная программа ClDianet
    4.3 Программа создания снимка сети
  5. Приложения
    5.1 Операции в сети и соответствующие им макрокоманды
    5.2 Макроязык системы KorNet (часть I)
      Макроязык системы KorNet (часть II)
      Макроязык системы KorNet (часть III)
    5.3 Комплектация системы

Предыдущая часть макро ||Следующая часть макро ||KorNet Развитие системы KorNet 1.5 || Переход на основную страницу

Переход на основную страницу Рейтинг@Mail.ru
Copyright © 1999 А.В.Корочков
Последнее обновление: Ноябрь 15, 2000.
Hosted by www.Geocities.ws

1