Конспект установочных лекций по комплексному курсу Информатика, Теория информации

       

Применение функции


Пусть F - обозначение (идентификатор, или абстракция, для) функции с функциональностью (s1, ..., sn) s и пусть E1, ..., En - любые выражения типов s1, ..., sn; тогда F (E1, ..., En) есть выражение типа s, называемое применением функции или вызовом (указателем) функции. Значение указателя функции есть f(a1, ..., an), где f - функция, обозначенная через F, а a1, ..., an - значения выражений E1, ..., En. E1, ..., En

- фактические параметры-выражения

(или аргументы), a a1, ..., an - фактические параметры-значения.

В БНФ-нотации синтаксис указателя функции выглядит следующим образом:

<указатель_функции>::=<функция>{(<выражение>{,<выражение>}*)}

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

Общий случай способа записи указателя функции - это префиксная форма со взятой в скобки последовательностью фактических аргументов. Для ряда функций мы будем использовать инфиксную форму записи, но это лишь синтаксическая разница. Семантически обработка указателей функций нe зависит от формы записи.

Для вычисления значения указателя функции используются следующие ППТ (пусть 1 <= i <= n):

E

 E' => F(E1, ..., Ei-1, E, Ei+1, .... En)
F(E1, ..., Ei-1, E’, Ei+1, .... En)

По этому правилу значение указателя функции вычисляется следующим образом: сначала (в произвольном порядке) вычисляются выражения-аргументы ("вызов параметра значением", "call-by-value").

Следует заметить, что имеются и другие стратегии вычисления указателя функции. Так, можно было бы сразу начинать с вычисления результата функции ("call-by-name") - до того, как будут вычислены значения аргументов. В этом случае вычисление параметров-выражений могло бы производиться по мере надобности при вычислении значения функции. Это в определенных ситуациях ведет к различению подслучаев по отношению к терминированности и в итоге позволяет также вычислять некоторые нестрогие функции.

Пример нестрогой функции дает условное выражение: конструкцию if-then-else-fi можно трактовать как нестрогую трехместную функцию. В нашем примере языка, однако, все функции, встречающиеся в указателях функций, предполагаются строгими. Поэтому языковой элемент if-then-else-fi вводится не как функция, а как элемент выражения (конструкт образования выражения).



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