Введение

В информатике, программирование на уровне функций относится к одной из двух контрастных парадигм программирования, выделенных Джоном Бэкусом в его работе о программах как о математических объектах, другой – программирование на уровне значений. В своей лекции при присуждении премии Тьюринга в 1977 году Бэкус представил то, что он считал необходимостью перехода к иной философии в проектировании языков программирования:
Кажется, языки программирования переживают не лучшие времена. Каждый последующий язык включает в себя, с незначительной доработкой, все возможности своих предшественников и добавляет ещё несколько. [ ] Каждый новый язык заявляет о новых и модных функциях, но горькая правда заключается в том, что лишь немногие языки делают программирование достаточно дешевым или надежным, чтобы оправдать затраты на их создание и изучение. Он разработал FP как первый язык программирования, специально поддерживающий стиль программирования на уровне функций. Программа на уровне функций не содержит переменных (см. бесточечное программирование), поскольку переменные программы, которые необходимы в определениях на уровне значений, не требуются в программах на уровне функций.

Введение

В стиле функционального программирования программа строится непосредственно из исходных программ путем их комбинирования с операциями или функционалами, формирующими программы. Таким образом, в отличие от подхода на уровне значений, который применяет заданные программы к значениям для получения последовательности значений, приводящей к желаемому результату, функциональный подход применяет операции формирования программ к заданным программам для получения последовательности программ, приводящей к желаемой результирующей программе. В результате, функциональный подход к программированию предполагает изучение пространства программ относительно операций формирования программ, с целью выявления полезных алгебраических свойств этих операций. Функциональный подход предлагает возможность представить множество программ как математическое пространство, акцентируя алгебраические свойства операций формирования программ над этим пространством. Другим потенциальным преимуществом функционального взгляда является возможность использования только строгих функций, что обеспечивает семантику снизу вверх – наиболее простую из всех. Еще одним преимуществом является существование функциональных определений, которые не являются результатом поднятия (то есть, переноса с более низкого уровня значений на более высокий функциональный уровень) какого-либо существующего определения на уровне значений: эти (часто лаконичные) функциональные определения представляют собой более мощный стиль программирования, недоступный на уровне значений.

Примеры языков

Канонический язык функционального программирования — FP. К другим относятся FL и J.