При оформлении подпрограмм посредством оператора 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 (повидимому по той причине, что в