Эта интерпретация должна быть независи-
ма от деталей исполнения и понятна людям, которые не
имеют научной степени в предметной области. Лоренс Паулсон
Прежде чем начать описание собственно функционального программирования, необхо-
димо обратиться к истории программирования вообще. В 40-х годах XX века появились
первые цифровые компьютеры, которые, как известно, программировались при помощи
переключения различного рода тумблеров, проводков и кнопок. Число таких переклю-
чений достигало порядка нескольких сотен и неумолимо росло с ростом сложности прог-
рамм. Поэтому следующим шагом развития программирования стало создание всевоз-
можных ассемблерных языков с простой мнемоникой. Однако даже ассемблеры не могли стать тем инструментом, которым смогли бы поль-
зоваться обыкновенные люди, т. к. мнемокоды все еще оставались слишком сложными,
тем более что всякий ассемблер был жёстко связан с архитектурой, на которой он испол-
нялся. Таким образом, следующим шагом после ассемблера стали так называемые импера-
тивные языки высокого уровня (BASIC, Pascal, C, Ada и прочие, включая объектно-ориен-
тированные). Императивными такие языки были названы по той простой причине, что
главным их свойством является ориентированность, в первую очередь, на последователь-
ное исполнение инструкций оперирующих с памятью (т. е. присваиваний) и итеративные
циклы.
Вызовы функций и процедур, даже рекурсивные, не избавляли такие языки от яв-
ной императивности (предписания). Возвращаясь к функциональному программированию... Краеугольным камнем в пара-
дигме функционального программирования, как будет показано далее, является функция. Если вспомнить историю математики, то можно оценить возраст понятия «функция». Ему
уже около четырёхсот лет, и математика придумала бесчисленное множество теоретичес-
ких и практических аппаратов для оперирования функциями, начиная от обыкновенных
операций дифференцирования и интегрирования, заканчивая заумными функциональны-
ми анализами, теориями нечётких множеств и функций комплексных переменных. Математические функции выражают связь между параметрами (входом) и результатом
(выходом) некоторого процесса. Так как вычисление — это тоже процесс, имеющий вход
и выход, функция является вполне подходящим и адекватным средством описания вычис-
лений. Именно этот простой принцип положен в основу функциональной парадигмы и
функционального стиля программирования. Функциональная программа представляет со-
бой набор определений функций.