В данном примере первый интерпретатор будет иметь уровень надежности равный 0.01, второй — 0.02 и т. д.
В необязательном разделе описание сигналов указывается число сигналов, интерпретируемых интерпретатором. Если этот раздел опущен, то полагается, что число интерпретируемых интерпретатором сигналов равно сумме сигналов, интерпретируемых всеми частными интерпретаторами. В константном выражении может вызываться функция NumberOf, аргументом которой является имя частного интерпретатора (или его псевдоним) с указанием фактических аргументов.
В необязательном разделе описания распределения сигналов для каждого частного интерпретатора указывается, какие сигналы из общего интерпретируемого массива передаются ему для интерпретации. Если этот раздел отсутствует, то считается, что каждый следующий частный интерпретатор получает следующий фрагмент общего вектора выходных сигналов. В примере 1 данный раздел описывает распределение сигналов по умолчанию.
В необязательном разделе описания распределения ответов для каждого частного интерпретатора указывается, какой элемент массива ответов он вычисляет. Если этот раздел опущен, то считается, что первый частный интерпретатор вычисляет первый элемент массива ответов, второй — второй элемент и т. д. Массив уровней надежностей всегда параллелен массиву ответов. В примере 1 данный раздел описывает распределение ответов по умолчанию.
Кроме того, в любом месте описания интерпретатора могут встречаться комментарии, заключенные в фигурные скобки.
Пример описания интерпретатора
В этом разделе приведены два примера описания одного и того же интерпретатора следующего состава: первый сигнал интерпретируется как температура путем умножения на 10 и добавления 273; следующие два сигнала интерпретируются как наличие облачности, используя знаковый интерпретатор; следующие три сигнала интерпретируются как направление ветра, используя двоичный интерпретатор (восемь румбов); последние три сигнала интерпретируются максимальным интерпретатором как сила осадков (без осадков, слабые осадки, сильные осадки). В первом примере приведено описание дубликатов всех стандартных интерпретаторов. Во втором — использованы стандартные интерпретаторы.
Пример 1.
Interpretator Meteorology
{Интерпретатор осуществляющий масштабирование и сдвиг сигнала}
Inter Empty1
Static
Real B Name "Масштабный множитель";
Real C Name "Сдвиг начала отсчета";
Begin
Answer = Signals[1] * B + C;
Reliability = 0
End
{Кодирование номером канала. Знаковый интерпретатор}
Inter Binary1 : (N : Long)
Static
Real E Name "Уровень надежности";
Var
Long A, B, I;
Real Dist;
Begin
Dist = E;
B = 0; {Число единиц}
A = 0; {Номер единицы}
For I = 1 To N Do Begin
If Abs(Signals[I]) < Dist Then Dist =Abs(Signals[I]);
If Signals[I] > 0 Then Begin A = I; B = B + 1; End;
End;
If B <> 1 Then Answer = 0 Else Answer = A
Reliability = Abs(Dist / E)
End
{Кодирование номером канала. Максимальный интерпретатор.}
Inter Major1 : (N : Long)
Static
Real E Name "Уровень надежности";
Var
Real A, B;
Long I, J;
Begin
A = -1.E+30; {Максимальный сигнал}
B = -1.E+30; {Второй по величине сигнал}
J = 0; {Номер максимального сигнала}
For I = 1 To N Do Begin
If Signals[I] > A Then Begin B = A; A = Signals[I]; J=I; End
Else If Signals[I] > B Then B = Signals[I];
End;
Answer = J;
If A – B > E Then Reliability = 1 Else Reliability = (A – B) / E;
End
Inter BynaryCoded1 : (N : Long)
Static
Real E Name "Уровень надежности";
Var
Long A, I;
Real Dist;
Begin
Dist = E;
A = 0; {Ответ}
For I = 1 To N Do Begin
If Abs(Signals[I]) < Dist Then Dist =Abs(Signals[I]);
A = A * 2;
If Signals[I] > 0 Then A = A + 1;
End;
Answer = A;
Reliability = Abs(Dist / E)
End
Contents Temp : Empty1, Cloud : Binary1(2), Wind : BynaryCoded1(3), Rain : Major1(3);