Математическое введение в декларативное программирование. Зюзысов В.М. - 47 стр.

UptoLike

Составители: 

8 Функциональный взгляд на вычисления
На протяжении последних 400 лет, центральным понятием математики является
понятие функции. Математические функции выражают связь между параметрами (входом)
и результатом (выходом) некоторого процесса. Так как вычисление это тоже процесс,
имеющий вход и выход, функциявполне подходящее средство задания вычислений.
Программа есть формальное описание конкретного вычисления. Если мы игнорируем
процедурные деталикак» вычисления делаются) и только принимаем во внимание ре-
зультатчто» вычисления сделали), то мы можем рассматривать программу как «черный
ящик», который получает какой-то вход и возвращает какой-то выход. Другими словами,
программа может быть рассмотрена как математическая функция.
Мы можем думать о программах, процедурах и функциях в языке программирова-
ния, как если бы они представляют математическое понятие функции:
в случае программы, x представляет вход и y представляет выход;
в случае процедуры или функции, x представляет параметры, а y представляет возвра-
щаемую величину.
В любом случае мы можем ссылаться на x как «вход» и на y как «выход». Поэтому
функциональный взгляд на программирование не делает различие между программой,
процедурой или функцией. Но он, однако, всегда различает входную и выходную величи-
ны.
В языке программирования мы также должны различать определение функции и
применение функции: первое описывает, как функция будет вычисляться, используя фор-
мальные параметры, в то время как функциональное применение есть вызов описанной
функции, использующий фактические параметры или аргументы.
С абстрактной точки зрения мы можем рассматривать функции как «черные ящи-
ки». Рассматривая функции как черный ящик, мы можем использовать его как конструк-
тивный блок, и с помощью объединения (когда выход одного ящика подается на вход дру-
гого) таких ящиков можно порождать более сложные операции. Такой процесс
«объединения» ящиков называется функциональной композицией.
Пусть дана математическая функция с действительными числами max: R×R R,
определяющая наибольшее значение из двух чисел:
max(m,n) = m, если m>n,
= n в противном случае.
Ее представление в виде черного ящика очень просто:
m
n
max
Можно использовать max как блок для более сложной функции. Предположим,
требуется построить функцию, которая находила бы максимум не из двух чисел, а из трех.
Эту новую функцию (назовем ее max3) определим следующим образом:
max3 (a,b,c) = a, если ab и a>c или ac и a>b,
b, если ba и b>c или bc и b>a,
c, если ca и c>b или cb и c>a,
a в противном случае.
Это довольно неудобное определение. Гораздо более элегантный способ определе-
ния функции max3 состоит в использовании уже определенной функции max:
47