А́лгебра — раздел математики, который можно нестрого охарактеризовать как обобщение и расширение арифметики; в этом разделе числа и другие математические объекты обозначаются буквами и другими символами, что позволяет записывать и исследовать их свойства в самом общем виде. Слово «алгебра» также употребляется в общей алгебре в названиях различных алгебраических систем. В более широком смысле под «алгеброй» понимают раздел математики, посвящённый изучению операций над элементами множеств произвольной природы, обобщающий обычные операции сложения и умножения чисел.
Функциона́льное программи́рование — парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних.
Логика первого порядка — формальное исчисление, допускающее высказывания относительно переменных, фиксированных функций и предикатов. Расширяет логику высказываний.
Haskell — стандартизированный чистый функциональный язык программирования общего назначения. Является одним из самых распространённых языков программирования с поддержкой отложенных вычислений. Система типов — полная, сильная, статическая, с автоматическим выводом типов, основанная на системе типов Хиндли — Милнера. Поскольку язык функциональный, то основная управляющая структура — это функция.
Miranda — функциональный язык программирования, созданный в 1985 году Дэвидом Тёрнером в качестве стандартного функционального языка. Имеет строгую полиморфную систему типов, поддерживает типы данных пользователя. Как и язык ML, преподаётся во многих университетах. Функциональные объекты строятся с помощью карринга существующих функций. Обладает ленивой семантикой. Программа представляет собой множество определений.
Фу́нкция — соответствие между двумя множествами, при котором каждому элементу одного множества соответствует единственный элемент другого.
Ля́мбда-исчисле́ние (λ-исчисление) — формальная система, разработанная американским математиком Алонзо Чёрчем для формализации и анализа понятия вычислимости.
Производная — фундаментальное математическое понятие, используемое в различных вариациях (обобщениях) во многих разделах математики. Это базовая конструкция дифференциального исчисления, допускающая много вариантов обобщений, применяемых в математическом анализе, дифференциальной топологии и геометрии, алгебре.
Nemerle — гибридный язык высокого уровня со статической типизацией, сочетающий в себе возможности функционального и объектно-ориентированного программирования, для платформ .NET и Mono. Главная особенность языка — развитая система метапрограммирования.
Комбина́торная ло́гика — направление математической логики, занимающееся фундаментальными понятиями и методами формальных логических систем или исчислений. В дискретной математике комбинаторная логика тесно связана с лямбда-исчислением, так как описывает вычислительные процессы.
Дифференциа́льный опера́тор — оператор, определённый некоторым дифференциальным выражением и действующий в пространствах функций на дифференцируемых многообразиях или в пространствах, сопряжённых к пространствам этого типа.
Аппликативное программирование — один из видов декларативного программирования, в котором написание программы состоит в систематическом осуществлении применения одного объекта к другому. Результатом такого применения вновь является объект, который может участвовать в применениях как в роли функции, так и в роли аргумента и так далее. Это делает запись программы математически ясной. Тот факт, что функция обозначается выражением, свидетельствует о возможности использования значений-функций — функциональных объектов — на равных правах с прочими объектами, которые можно передавать как аргументы, либо возвращать как результат вычисления других функций.
Каррирование — преобразование функции от многих аргументов в набор вложенных функций, каждая из которых является функцией от одного аргумента. Возможность такого преобразования впервые отмечена в трудах Готтлоба Фреге, систематически изучена Моисеем Шейнфинкелем в 1920-е годы, а наименование своё получила по имени Хаскелла Карри — разработчика комбинаторной логики, в которой сведение к функциям одного аргумента носит основополагающий характер.
Мона́да — особый тип данных в функциональных языках программирования, для которого возможно задать императивную последовательность выполнения некоторых операций над хранимыми значениями. Монады позволяют задавать последовательность выполнения операций, производить операции с побочными эффектами и другие действия, которые сложно или вовсе невозможно реализовать в функциональной парадигме программирования другими способами.
Числова́я фу́нкция — функция, которая действует из одного числового пространства (множества) в другое числовое пространство (множество). Числовые множества — это множества натуральных, целых, рациональных, вещественных и комплексных чисел вместе с определёнными для соответствующих множеств алгебраическими операциями. Для всех перечисленных числовых множеств, кроме комплексных чисел, определено также отношение линейного порядка, позволяющее сравнивать числа по величине. Числовые пространства — это числовые множества вместе с функцией расстояния, заданной на соответствующем множестве.
Термин рекурсивная функция в теории вычислимости используется для обозначения трёх классов функций:
- примитивно рекурсивные функции;
- общерекурсивные функции;
- частично рекурсивные функции.
map
— функция высшего порядка, используемая во многих языках программирования, которая применяет какую-либо функцию к каждому элементу списка своих аргументов, выдавая список результатов как возвращаемое значение. При рассмотрении в функциональной форме она часто называется «применить-ко-всем».
В информатике язык программирования имеет функции первого класса, если он рассматривает функции как объекты первого класса. В частности, это означает, что язык поддерживает передачу функций в качестве аргументов другим функциям, возврат их как результат других функций, присваивание их переменным или сохранение в структурах данных. Некоторые теоретики языков программирования считают необходимым условием также поддержку анонимных функций. В языках с функциями первого класса имена функций не имеют никакого специального статуса, они рассматриваются как обычные значения, тип которых является функциональным. Термин был впервые использован Кристофером Стрэчи в контексте «функции как объекты первого класса» в середине 1960-х.
Род в теории типов — тип конструктора типов, или более формально, тип ти́пового оператора высшего порядка. Система родо́в естественным образом представляется как родительское (вышестоящее) просто типизированное лямбда-исчисление, снабжённое примитивным типом, обозначаемым «*
», формирующим род мономорфных типов данных.
Стратегия вычисления — правила семантики языка программирования, определяющие, когда следует вычислять аргументы функции, и какие значения следует передавать. Например, стратегия «вызов-при-упоминании/передача-по-ссылке» диктует, что аргументы должны быть вычислены перед выполнением тела вызываемой функции, и что ей должны быть предоставлены две возможности в отношении каждого аргумента: чтение текущего значения и его изменение посредством операции присваивания. На эту стратегию похожа стратегия редукции в лямбда-исчислении, но есть отличия.