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

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

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

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

 • Конкатенативная
 • Векторная[en]
 • Метапрограммирование

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

 • Связанные темы

Программирование в крупном и мелком масштабе[en]
Модульность
Полиморфизм
Продолжения и CPS
Параллелизм и конкурентность

 • Методы и алгоритмы

Автоматное
Динамическое
Потоков данных
Событийно-ориентированное
Реактивное
Сервис-ориентированное

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

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

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

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

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

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

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

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

  • Бэкус Дж. Можно ли освободить программирование от стиля фон Нейманна? Функциональный стиль и соответствующая алгебра программ. — Лекции лауреатов премии Тьюринга: пер. с англ. / Под ред. Р. Эшенхерста. М.: Мир, 1993 — с. 84-158.
  • 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]