
14.1. ОСНОВЫ
λ
-ЯЗЫКА
389
(если результат — объект). Сейчас они чаще всего называются функци-
оналами (высших типов). В λ-языке и те, и другие чаще всего называ-
ются просто функциями. Но лишь М. И. Шейнфинкель и Х. Б. Карри
(H. B. Curry) начали разработку их систематической теории. И сразу же
они натолкнулись на важное преобразование, позволяющее уменьшить
количество сущностей.
Для описания функций многих переменных хочется ввести много-
местный квантор типа
λx
1
. . . x
n
. t(x
1
, . . . , x
n
). Карри
2
подметил ис-
ключительно важное преобразование, базирующееся на том, что у нас
функции систематически трактуются как значения. Вместо f(x, y) он
рассмотрел функционал f, перерабатывающий x в функцию от y:
f(x)(y) = f(x, y). Таким образом, без ограничения общности доста-
точно рассматривать функции от одного аргумента. Такое преобразова-
ние называется преобразованием Карри (Currying). Оно соответствует
также представлению λx
1
. . . x
n
в форме λx
1
. . . λx
n
. (Проверьте!)
Преобразование Карри имеет важные аналогии в программирова-
нии.Оно соответствует частичной параметризации процедур.Если име-
ется процедура P(x1, x2, . . . , xn), а известно лишь значение x1 = a, мож-
но тем не менее проделать внутри P вычисления, зависящие лишь от
x1, и получить частичную процедуру P1(x2, . . . , xn) = P(a, x2, . . . , xn).
Если не требовать оптимизации частичной процедуры, то частичная па-
раметризация становится удобным, легко реализуемым и не портящим
эффективность программ методом программирования, который, к не-
счастью, был осознан вскоре после того, как было фиксировано опреде-
ление наиболее популярных языков программирования —
C
и
Pascal
. У
себя в примерах будем обозначать частичную параметризацию P
∗
(a, . . . , z).
Отметим один тонкий момент. Пусть дана процедура P(x, y). Произ-
ведя частичную параметризацию P
∗
(a, b), мы с точки зрения програм-
мирования получаем не значение P(a, b), а процедуру без параметров,
вычисляющую это значение.
Упражнения к § 14.1
14.1.1. Пусть
f(x, y) — функция, вычисляющая расстояние между дву-
мя действительными числами. Что такое λx. f(0, x)?
14.1.2. Запишите определенный интеграл
b
R
a
f(x) dx на λ-языке.
2
На самом деле это преобразование рассматривалось еще Шейнфинкелем и фон Ней-
маном.