Содержание

Назад Вперед

5.1.1.1. Описание безусловной области

declaration-of-rectangular-domain :
multidimensional-domain
new-domain
multidimensional-domain :
onedimensional-domain
[ name-multidimensional-domain : ] ( domain-product )
domain-product :
component-domain { ; component-domain }+
component-domain :
multidimensional-domain
name-unconditional-domain
onedimensional-domain :
[ name-onedimensional-domain : ] ( name-index = value )
value :
range
const-expression
range :
const-expression .. const-expression
new-domain :
[ name-new-domain : ] new-domain-without-name
new-domain-without-name :
name-unconditional-domain / list-modification
modification :
name-index = value
name-onedimensional-domain { { +,- } boundary-function }+
boundary-function :
LEFT( const-expression )
RIGHT( const-expression )
name-rectangular-domain :
name-onedimensional-domain
name-multidimensional-domain
name-new-domain
declaration-of-diagonal-domain :
name-diagonal-domain : name-unconditional-domain / list-condition-on-index

Ключевым понятием при описании прямоугольных областей является понятие одномерной области. Одномерная область служит для задания диапазона точек на некоторой оси координат индексного пространства. В простейшем случае при описании одномерной области указывается имя одномерной области, имя индекса и границы изменения значений индекса:

RegionK: (k =1..15).

Имя-одномерной-области может использоваться для ссылки на эту область.

Имя-индекса есть индексная переменная, множество значений которой определяется диапазоном const-expression .. const-expression. Границами диапазона являются целые положительные константные выражения, построенные из целых констант, параметров области и арифметических операций. Требуется, чтобы в программе всем параметрам области были присвоены конкретные значения в описании параметров области. Значение нижней границы диапазона должно быть не больше значения верхней границы.

Многомерная область строится при помощи операции ";" произведения прямоугольных областей.

Пример описания двумерной области, полученной с помощью операции произведения одномерных областей Axis и AxisL:

Square: (AxisK : (k=1..15) ; AxisL : (l=1..5) ) .

Область Square может быть описана также другими способами (например, с учетом описания, приведенного выше):

Square : (RegionK ; AxisL : (l=1..5) ).

Операция ";" произведения прямоугольных областей обладает следующим свойством: если A и B - области, то A;B=B;A .

Это означает, что порядок направлений индексного пространства при описании области не фиксируется (или, что с точки зрения пользователя то же самое, фиксируется некоторым произвольным образом). Если порядок направлений индексного пространства существенен (например, необходимо согласование направлений при использовании величин на одних и тех же областях в различных разделах), то он может быть задан при помощи описания INDEX (см. п. 5.1.2).

Области, являющиеся операндами операции произведения областей, должны иметь различные имена индексов.

Модификация прямоугольной области может состоять в добавлении некоторого числа точек, в удалении точек или изменении диапазона. Модификация двух первых типов описывается при помощи функций границ LEFT(n) и RIGHT(n). Функция LEFT применяется к левой границе диапазона, функция RIGHT - к правой границе диапазона. Знак "+" перед функцией означает, что к одномерной области добавляются точки, "-" - что из одномерной области удаляются точки. Обе эти функции имеют один параметр n, определяющий число точек, которые необходимо удалить или добавить к области. В качестве фактического параметра функций LEFT и RIGHT может быть задана только целая положительная константа. Обращение к функциям допустимо лишь в контексте с именем одномерной области, задающей модифицируемый диапазон:

name-onedimensional-domain {+,-} LEFT(n)

или

name-onedimensional-domain {+,-} RIGHT(n).

Например, описание

FlushK : Square / AxisK - LEFT(2) + RIGHT(2).

определяет область FlushK, состоящую из точек k=3 .. 17.

Границы диапазона, получаемого в результате применения функций LEFT или RIGHT, должны быть положительными целыми, причем левая граница не должна превосходить правую.

Описание Square2:

Square / AxisK+Left(1)-Right(2) .

неверно, так как левая граница получаемого в результате диапазона k=0..13 не является положительной.

Область, модифицируемая при помощи функций Left или Right должна быть многомерной областью.

Можно изменить составляющую одномерную область и путем явного переопределения диапазонов. Для этого в модификации надо указать имя индекса направления и его новое значение. Например:

Newsquare: Square / AxiisK+RIGHT(3), L=50...80.

Если список модификаций содержит более одного элемента, то заданные в этом списке модификации действуют на модифицируемую область в порядке написания слева направо.

Кроме определения прямоугольных областей, в Норме имеется возможность задания диагональных областей путем наложения условий на уже определенную область (прямоугольную или диагональную).

Диагональная область определяется при помощи условий на индексы некоторой ранее определенной области D и состоит из тех точек области D, в которых эти условия принимают значение ''истина''. Например, описания

KL: ( (k=1..10) ; (l=1..10) ) . Diagonal: KL/ k=l.

задают область Diagonal, состоящую из точек (k=1, l=1), (k=2, l=2), ...., (k=10, l=10).

Индексы величин, используемых при записи условия на индексы, не обязательно должны входить в множество индексов области D, на которую накладываются условия --- это могут быть внешние индексы (см. п. 5.2.3.2).

Допустимый вид условий на индексы позволяет статически определить точки, из которых состоит диагональная область (это возможно, конечно, и для прямоугольной области). Поэтому прямоугольные и диагональные области являются статическими объектами, в отличие от условных областей, рассматриваемых ниже.


Содержание

Назад Вперед