Аппликативное программирование

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Парадигмы программирования
 • Императивная (контрастирует с Декларативной)
Процедурная
Структурная
Модульная
Аспектно-ориентированная
Объектно-ориентированная
Агентно-ориентированная
Компонентно-ориентированная
Прототипно-ориентированная
Обобщённое программирование

 • Конкатенативная
 • Декларативная (контрастирует с Императивной)

Функциональная
Чистая функциональная
Аппликативная
Комбинаторная
Основанная на продолжениях
В терминах Рефал-машины
Логическая
Ограничениями
Потоком данных

 • Метапрограммирование

Языково-ориентированная
Пользовательская[en]
Автоматизация процесса программирования
Рефлексивное

 • Параллельная
 • Событийно-ориентированная

Реактивная
Сервис-ориентированная
 • Автоматная
п·о·р

Аппликативное программирование — один из видов декларативного программирования, в котором написание программы состоит в систематическом осуществлении применения одного объекта к другому. Результатом такого применения вновь является объект, который может участвовать в применениях как в роли функции, так и в роли аргумента и так далее. Это делает запись программы математически ясной. Тот факт, что функция обозначается выражением, свидетельствует о возможности использования значений-функций — функциональных объектов — на равных правах с прочими объектами, которые можно передавать как аргументы, либо возвращать как результат вычисления других функций.

Модели аппликативного программирования основываются, как правило, на комбинаторной логике или λ-исчислении. В комбинаторной логике единственный метаоператор — аппликация, обеспечивающая применение одного объекта к другому, в λ-исчислении, кроме аппликации, есть метаоператор λ-абстракции, с помощью которого возможно построение функций по выражениям, которые, в свою очередь, можно применять к другим объектам. Таким образом, объекты в аппликативном программировании ведут себя как функциональные сущности, что относит его к функциональной парадигме, однако, в ограниченном смысле, так как имеют место некоторые особенности:

  • число аргументных мест (арность) объекта заранее не фиксируется, но проявляет себя постепенно, во взаимодействиях с другими объектами;
  • при конструировании составного объекта один из исходных объектов — функция, применяется к другому — аргументу, при этом в других контекстах они могут поменяться ролями, то есть функции и аргументы рассматриваются как объекты на равных правах;
  • разрешается самоприменимость функций, то есть объект может применяться сам к себе.

Аппликативный язык программирования — язык программирования, который предназначен для поддержки разработки программ способом получения результата вычисления функции, зависящей от комбинации переменных. Конечный результат достигается последовательным применением функциональных преобразований к данным[1].

Примерами аппликативных языков программирования служат функциональные языки Лисп[2] и ML. В языке Haskell эта парадигма программирования реализована в виде аппликативного функтора, расширяющего возможности механизма функциональной абстракции высших порядков до многоместной.

Примечания[править | править вики-текст]

  1. Applicative Programming with Effects (in Haskell, 2008) by Ross Paterson.
  2. Пантелеев А. Г. Об интерпретаторе с языка Лисп для ЕС ЭВМ // Программирование. — 1980. — № 3. — с. 86-87.

Литература[править | править вики-текст]

  • Бэкус Дж. Можно ли освободить программирование от стиля фон Нейманна? Функциональный стиль и соответствующая алгебра программ. — Лекции лауреатов премии Тьюринга: пер. с англ. / Под ред. Р. Эшенхерста. М.: Мир, 1993 — с. 84-158.</ref>.
  • Hindley J. R., Seldin J. P. (Eds.) To H. B. Curry: Essays on combinatory logic, lambda calculus and fromalism. — Academic Press, 1980.
  • Sabry A. What is a Purely Functional Language?. — Journal of Functional Programming, 1998, Vol. 8, No 1, pp. 1-22
  • Peyton Jones S. L. The implementation of functional programming languages. — N.Y.: Prentice Hall International, 1987. — 445 p. [1]