- автоматизирует проверку аргументов на соответствие размерностей и размеров, освобождает разработчика метода от выполнения этих проверок;
- автоматизирует создание дерева алгоритма, обеспечивает защиту от случайной модификации поддеревьев методов после создания алгоритма, освобождает разработчика метода от выполнения необходимых для этого инициализаций;
- обеспечивает минимальную самодокументированность методов, предоставляя актуальную информацию о структуре их аргументов.
::= обозначает определение элемента,
многоточие обозначает повторение элемента любое число раз,
необязательные элементы заключаются в квадратные
скобки []:
ОписаниеМетода ::= ИмяМетода СписокВходов -> СписокВыходов [; Комментарий]
СписокВходов ::= Аргумент,...,Аргумент
СписокВыходов ::= Аргумент,...,Аргумент
Аргумент ::= [?] [ИмяАргумента=] Координата | ... | Координата
Координата ::= ИмяРазмерности
Координата ::= {ИмяЭлемента,...,[?]ИмяЭлемента,...,ИмяЭлемента}
Имя метода — это произвольный идентификатор, не содержащий пробелов.
Списки входных и выходных аргументов могут состоять из любого числа элементов, в том числе они могут быть пустыми. Разделитель -> опускать нельзя.
Если описание аргумента начинается знаком вопроса, то аргумент может быть опущен. При реализации функций вычисления 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.