Основы современных компьютерных технологий

ВМ-функции


Каждая ВМ-функция - функция, содержащая описание ВМ (тип функции 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-переменная. Аналогично в теле процедуры можно изменять значения параметров, но действуют эти изменения также в рамках тела процедуры.

    Операторы определяют последовательность вычислений и используются внутри процедур. Рассмотрим правила и примеры записи различных операторов.


    Содержание раздела