Имеются четыре категории процедур: внутренние функции, встроенные функции, внешние функции и внешние подпрограммы. Первые три категории процедур относятся к функциям (или процедурам-функциям), а последняя категория - к подпрограммам (или процедурам-подпрограммам). Имеются две категории модулей: модули-процедуры и модули-спецификации; к первой из них относятся модули-функции и модули-подпрограммы, а ко второй - модули-блоки данных. Правила типа для процедур-функций указаны в п.5.3.
8.1. Внутренние функции. Внутренняя функция определяется в том же самом программном модуле, в котором имеются ссылки на эту функцию. Такая функция определяется при помощи объявления внутренней функции.
В каждом программном модуле все определения внутренних функций должны предшествовать первому оператору этого модуля и следовать за объявлениями спецификаций, если таковые имеются. Имя внутренней функции не должно встречаться в том же самом программном модуле ни в объявлениях внешних имен, ни в качестве имени переменной или имени массива.
8.1.1. Структура объявлений внутренних функций. Внутренняя функция определяется при помощи объявления внутренней функции, которое имеет вид:
( - символическое имя определяемой функции;
- выражение;
каждое - символическое имя, называемое формальным параметром).
Соответствие между и должно удовлетворять правилам присваивания из пп.7.1.1.1-7.1.1.2.
Символические имена, являющиеся формальными параметрами, используются в объявлении внутренней функции лишь для указания типа, числа и порядка параметров функции и могут совпадать с именами переменных того же типа, встречающимися где-либо еще в рассматриваемом программном модуле (но вне объявления данной функции). Все формальные параметры в одном объявлении функции должны быть различными.
Выражение , кроме формальных параметров, может содержать только:
нетекстовые константы;
указатели переменных;
указатели встроенных функций;
указатели внутренних функций, определенных ранее в данном программном модуле;
указатели внешних функций.
8.1.2. Ссылки на внутренние функции. Для ссылки на внутреннюю функцию используется ее указатель (п.5.2) в качестве первичного выражения в арифметическом или логическом выражении. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами. Фактическим параметром в указателе внутренней функции может быть любое выражение того же типа, что и соответствующий формальный параметр.
Вычисление значения указателя внутренней функции заключается в установлении связи (п.10.2.2) между значениями фактических параметров и соответствующими формальными параметрами и в вычислении значения выражения в объявлении, определяющем эту функцию. Вычисленное значение выражения принимается в качестве значения указателя функции и тем самым становится доступным в выражении, содержащем этот указатель.
8.2. Встроенные функции и ссылки на них. Символические имена встроенных функций заранее известны процессору и, если они удовлетворяют условиям, изложенным в п.10.1.7, им приписывается специальный смысл и тип в соответствии с табл.3.
Таблица 3
Встроенная функция | Определение | Число параметров | Символическое имя | Тип | |
параметров | функции | ||||
Абсолютное значение | 1 | Вещ. | Вещ. | ||
Цел. | Цел. | ||||
Дв. | Дв. | ||||
Усечение* | умножается на | 1 | Вещ. | Вещ. | |
Вещ. | Цел. | ||||
Дв. | Цел. | ||||
Взятие остатка** | 2 | Вещ. | Вещ. | ||
Цел. | Цел. | ||||
Выбор наибольшего значения | 2 | Цел. | Вещ. | ||
Вещ. | Вещ. | ||||
Цел. | Цел. | ||||
Вещ. | Цел. | ||||
Дв. | Дв. | ||||
Выбор наименьшего значения | 2 | Цел. | Вещ. | ||
Вещ. | Вещ. | ||||
Цел. | Цел. | ||||
Вещ. | Цел. | ||||
Дв. | Дв. | ||||
Преобразование в плавающую форму | Преобразование от целого к вещественному | 1 | Цел. | Вещ. | |
Преобразование в фиксированную форму | Преобразование от вещественного к целому | 1 | Вещ. | Цел. | |
Передача знака | умножается на | 2 | Вещ. | Вещ. | |
Цел. | Цел. | ||||
Дв. | Дв. | ||||
Положительная разность | 2 | Вещ. | Вещ. | ||
Цел. | Цел. | ||||
Получение максимальной значащей части аргумента двойной точности | 1 | Дв. | Вещ. | ||
Получение вещественной части комплексного аргумента | 1 | Компл. | Вещ. | ||
Получение мнимой части комплексного аргумента | 1 | Компл. | Вещ. | ||
Преобразование вещественного аргумента в форму двойной точности | 1 | Вещ. | Дв. | ||
Преобразование двух вещественных аргументов в комплексную форму | 2 | Вещ. | Компл. | ||
Получение комплексной величины, сопряженной с аргументом | 1 | Компл. | Компл. |
________________
* означает наибольшее целое, величина которого не превосходит величины , имеющее тот же знак, что и .
** Функция MOD или AMOD (, ) определяется как
.