ВМ-функции
Каждая ВМ-функция - функция, содержащая описание ВМ (тип функции Rule), должна быть объявлена на панели Function Sheet и описана на панели Rule Function Subsheet.
Описание В М-функции включает в себя множество правил (условных и безусловных предложений вычислимости) и объявление ее входных переменных:
переменных-параметров В М-функции в поле Parameter Variables (значения переменным этого поля присваиваются непосредственно из панели Variables Sheet);
переменных-аргументов в поле Argument Variables (значения переменных передаются через список вызова В М-функции);
и выходных переменных - результатов функции в поле Result Variables (значения возвращаются через список вызова ).
В общем случае для В М-функций можно отойти от жесткого разделения на только входные или только выходные переменные: входными считаются переменные, значения которых известны до обращения к функции, а выходными - переменные, значения которых могут быть вычислены для заданного множества входных переменных. Поэтому входными могут быть переменные, описанные и как аргументы, и как результаты; аналогично и выходными. Однако в вызове ВМ-функции должен быть специфицирован полностью весь список аргументов и результатов ВМ-функции, даже если заведомо известно, что не все исходные данные означены и соответственно будут получены не все результаты.
В ВМ-функциях попытка означить переменную-параметр значением, отличным от того, что задано на панели Variables Sheet, приводит к ошибке, фиксируются ошибки также, если значение какой-либо переменной вычисленное с помощью одного соотношения, не согласуется со значением этой или другой переменной, вычисленной с помощью другого соотношения.
В теле ВМ-функции могут быть ссылки или обращения к другим В М-функциям или процедурам (рекурсивные ссылки и вызовы не допускаются, т.е. нельзя обращаться к самой себе).
Решатель задач осуществляет обработку переменных и правил ВМ-функции аналогично тому, как это делается для переменных и правил из панели описания вычислительной задачи Rule Sheet. Неизвестные переменные могут содержаться как в левых, так и в правых частях правил и вычисляются с использованием тех правил, в которых они представлены.
Значения переменных передаются в и возвращаются из В М-функций при вызове ВМ-функции по Call или с помощью ссылки к ВМ-функции в выражении. Связывание локальных переменных из правил ВМ-функции с переменными, которые указываются при ее вызове по Call или по ссылке, осуществляется позиционным способом.
После вызова ВМ-функции в вычислениях участвуют те правила, для которых заданы значения входных переменных через переменные-параметры, переменные-аргументы и переменные-результаты. Ниже приведены примеры описания функций.
ВМ-функции rat и Cone используют ВМ-функцию Pythagoras. ВМ-функция INTEGRAND может быть использована в подпрограмме интегрирования (процедуре-функции) для численного вычисления интеграла. При этом а является переменной-параметром для ВМ-функции INTEGRAND, и значение ее передается из
Variable Sheet.
347
================== RULE FUNCTION: Pythagoras ==================
Comment: Теорема Пифагора
Parameter Variables:
Argument Variables: side1,side2
ResultVariables: hypotenuse
S Rule-----------------------------------------------------------------------------------------------
hypotenuse^2 = side1^2 + side2^2
==================== RULE FUNCTION: rat =========================
Comment: Прямоугольный треугольник
Parameter Variables:
Argument Variables: a,b,c,alpha,beta,perimeter.area
ResultVariables:
S Rule --------------------------------------------------------------------------
alpha + beta = pi()/2
call Pythagoras(a,b;c)
a/b = tan(alpha)
perimeter = a + b + с
area -a* b/2
==================== RULE FUNCTION: CONE ======================
Comment: Геометрия конуса
Parameter Variables:
Argument Variables: radius,height,slant,theta
ResultVariables: surface,volume
S Rule ----------------------------------------------------------------------------
slant = Pythagoras(radius,height)
tand(theta/2) = radius/height
surface/slant = pi() * radius
volume = radius^2 * height * pi()/3
================== RULE FUNCTION: INTEGRAND =================
Comment: Интегрируемая функция
ParameterVariables: a
Argument Variables: x
ResultVariables: у
S Rule-----------------------------------------------------------------------------------------------
у = a^x-ln(x)
Процедуры - функции
Каждая
процедура-функция (Procedure Function,
в дальнейшем будем называть ее просто
процедура) должна быть объявлена на панели
Function Sheet и определена на панели
Procedure Function Subsheet. Описание процедуры включает в свой состав множество операторов и объявления:
348
параметров (передаются непосредственно из панели Variables Sheet, описываются в поле Parameter Variables);
входных переменных (поле Input Variables) и выходных переменных (поле Output Variables), которые передаются через список вызова процедуры.
В процедуре с помощью операторов бейсикоподобного алгоритмического языка задается алгоритм вычисления значений выходных переменных, при этом порядок выполнения операторов процедуры детерминирован. В процедурах допускаются ссылки к другим процедурам и функциям, можно использовать и рекурсию, т.е. обращение по Call к самой себе.
Переменные, объявленные как входные (Input), должны быть известны до вызова процедуры, хотя значения входных переменных можно изменять внутри процедуры (в ВМ-функциях это приводит к ошибке вычислений). Однако изменения эти не распространяются на соответствующие фактические переменные вызова процедуры, исключение составляют переменные типа список - значения элементов списка могут быть изменены в процедуре, даже если имя списка передается как Input-переменная. Аналогично в теле процедуры можно изменять значения параметров, но действуют эти изменения также в рамках тела процедуры.
Операторы определяют последовательность вычислений и используются внутри процедур. Рассмотрим правила и примеры записи различных операторов.
Содержание раздела