KorNet 1.5
А.В. Корочков
Система программирования на основе
языка С++ для работы с моделью
данных типа
"семантическая сеть"
("KorNet")
Описание системы (1995)
(См. также KorNet
)
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);
| 4.1 | Интерфейсная программа TVDianet |
| 4.2 | Интерфейсная программа ClDianet |
| 4.3 | Программа создания снимка сети |
| 5.1 | Операции в сети и соответствующие им макрокоманды |
| 5.2 | Макроязык системы KorNet (часть I) |
| Макроязык системы KorNet (часть II) | |
| Макроязык системы KorNet (часть III) | |
| 5.3 | Комплектация системы |