- автоматизирует проверку аргументов на соответствие размерностей и размеров, освобождает разработчика метода от выполнения этих проверок;
- автоматизирует создание дерева алгоритма, обеспечивает защиту от случайной модификации поддеревьев методов после создания алгоритма, освобождает разработчика метода от выполнения необходимых для этого инициализаций;
- обеспечивает минимальную самодокументированность методов, предоставляя актуальную информацию о структуре их аргументов.
::=
обозначает определение элемента,
многоточие обозначает повторение элемента любое число раз,
необязательные элементы заключаются в квадратные
скобки []
:ОписаниеМетода ::= ИмяМетода СписокВходов -> СписокВыходов [; Комментарий] СписокВходов ::= Аргумент,...,Аргумент СписокВыходов ::= Аргумент,...,Аргумент Аргумент ::= [?] [ИмяАргумента=] Координата | ... | Координата Координата ::= ИмяРазмерности Координата ::= {ИмяЭлемента,...,[?]ИмяЭлемента,...,ИмяЭлемента}
Имя метода — это произвольный идентификатор, не содержащий пробелов.
Списки входных и выходных аргументов могут состоять из любого числа элементов, в том числе они могут быть пустыми. Разделитель -> опускать нельзя.
Если описание аргумента начинается знаком вопроса, то аргумент может быть опущен. При реализации функций вычисления CalcDef и CalcCellDef следует учитывать, что в этом случае аргумент метода представляется нулевым указателем на ImaMatrix.
Далее в описании аргумента может следовать имя и знак равенства. Если они не указаны, то имя аргумента по умолчанию совпадает с описанием аргумента, и может содержать спецсимволы
{
, } |
.Каждый аргумент описывается перечислением координат многомерной матрицы. Число координат равно размерности матрицы. Символ вертикальной черты служит разделителем координат. Координата может описываться двумя способами: идентификатором или списком элементов.
Если координата матрицы задана идентификатором, то размер матрицы по данной координате может быть любым. Однако если в описании какой-либо матрицы в любом из методов данного алгоритма встречается координата с таким же именем, то размеры матриц по соответствующим координатам обязаны совпадать.
Если размерность задана списком идентификаторов в фигурных скобках, то размер матрицы по данной координате должен быть равен числу элементов в списке. Если в списке есть элемент, перед которым стоит символ вопроса ?, то этот элемент и все последующие за ним необязательны. В этом случае размер матрицы может варьироваться в пределах от числа обязательных элементов до полного числа элементов в списке.
Строка описания может содержать концевой комментарий, отделяемый от неё символом точки с запятой. Комментарий может иметь произвольную длину и содержать произвольные символы, включая табуляции и переводы строки. С помощью комментария разработчик метода может включить в исходный код краткие пояснения к некоторым элементам описания.
Пример.
Описание методов настройки и вычисления для алгоритма наименьших квадратов могло бы выглядеть следующим образом:
HRESULT CLsmTune:: Description (maString* descr) { *descr = "Tune St|F, St|{goal} ->;\n" "St - обучающая выборка;\n" "F - набор признаков;\n" "goal - целевой признак.\n"); return S_OK; } HRESULT CLsmCalc::Description (maString* descr) { *descr = "Calc Sc|F -> Sc|{y};\n" "Sc - рабочая выборка;\n" "F - набор признаков;\n" "y - результат аппроксимации.\n"); return S_OK; }Здесь описаны два метода алгоритма наименьших квадратом LSM. Метод настройки CLsmTune имеет два обязательных входных аргумента размером St×F и St×1 и ни одного выходного. Метод вычисления CLsmСalc имеет входную матрицу размером Sc×F и выходной вектор размером Sc×1.