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

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Парадигмы программирования

Рефлексивность
Гомоиконность

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

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

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

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

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

Примечания

  1. Applicative Programming with Effects Архивная копия от 21 октября 2007 на Wayback Machine (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]