При оформлении подпрограмм посредством оператора DEF FN вызов функции производится уже не по метке, а по имени, которое должно оканчиваться суффиксом, соответствующим типу вычисляемого значения. Использование этого имени вызывающей программой в операторе присваивания или в выражении обеспечивает вычисление значения функции. Оператор DEF FN может быть простым

DEF FNname [ (parameterlist) ] = expression (3.15),

когда подпрограмма используется только для вычисления функции, или

составным

DEF FNname [ (parameterlist) ] (3.16),

[s tatementblock] FNname = expression

[statementblock] [EXIT DEF]

[statementblock] END DEF

когда помимо вычисления функции нужно сделать что-то еще.

Выражение expression задает способ вычисления функции.

Для передачи подпрограмме значений аргументов функции используется список формальных параметров

parameterlist ,

которые обозначаются именами используемых в подпрограмме переменных и записываются в следующей форме:

variable[( )] [AS type] [, variable[( )] [AS type]],

где: variable — имя переменной; type — тип переменной

(стандартный или определенный пользователем).

Передача значений аргументов осуществляется при вызове подпрограммы, для этого в список должны быть подставлены фактические параметры, то есть значения или выражения с именами используемых в вызывающей программе переменных. Типы фактических параметров должны соответствовать типам формальных параметров.

Здесь вновь следует обратить внимание на терминологические тонкости, касающиеся функционирования подпрограмм. Когда подпрограмма по заданным аргументам (а иногда и без них, как это делает подпрограмма RND) вычисляет некоторое значение стандартного или определенного пользователем типа, то эта подпрограмма реализует некоторую функцию. А как быть, если подпрограмма вместо или помимо вычисления какой-то функции делает еще что-то такое, что в принципе не может быть описано в терминах вычисления некоторого выражения? Такая подпрограмма по терминологии языков высокого уровня называется процедурой. Принимая эту терминологию, можно отнести вариант простого оператора DEF FN к созданию подпрограммы-функции, а вариант составного DEF FN — подпрограммы-процедуры. В описании синтаксиса этого оператора информационная поддержка рекомендует пользоваться более развитыми средствами записи подпрограмм FUNCTION и SUB (повидимому по той причине, что в