Читать онлайн «Лекции по курсу "Функциональное программирование" [Haskell]»

Автор Роман Душкин

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