WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

Частичное применение — возможность в ряде языков программирования зафиксировать часть аргументов многоместной функции и создать другую функцию, меньшей арности. Например, имея трёхместную функцию , можно зафиксировать («привязать») первый аргумент , и построить бинарную функцию такую, что для любых .

В практике программирования частичное применение используется в связи с тем, что функции, полученные путём фиксации некоторого количества аргументов, зачастую оказываются полезными. К примеру, многие языки программирования имеют функцию или оператор инкремента (являющимся фиксацией единицы как одного из аргументов двухместного сложения) или функцию обращения значения. Частичное применение возможно реализовать практически во всех языках программирования, обладающих возможностью определения многоместных функций. В ряде языков есть специализированные конструкции для частичного применения, например, в стандартной библиотеке C++ имеется функция bind, которая на входе принимает имя функции и аргументы, и возвращает функциональный объект — результат частичного применения переданного набора аргументов к функции.

В ряде функциональных языков программирования, таких как ML и Haskell, функции объявляются в каррированной форме по умолчанию, то есть, понятие о многоместности функций реализуется средствами одноместных функций высших порядков; в этих условиях частичным применением (называемом в этих языках сечением операторов) оказывается всякая передача неполного числа аргументов[1].

В языках программирования с функциями первого класса можно определить curry, uncurry и papply, чтобы осуществить каррирование и частичное применение напрямую (при этом связь между ними следующая: curry papply = curry). Но такой подход может привести к дольшему времени выполнения программы в связи с созданием дополнительных замыканий, в то время как Haskell позволяет использовать более эффективные приёмы[2].

Примечания

  1. Денис Москвин. Сечения композиции как инструмент бесточечного стиля // Практика функционального программирования. — 2010. № 4. С. 89—104.
  2. Марлоу — Пейтон-Джонс, 2004.

Литература

  • Simon Marlow, Simon Peyton Jones. Making a Fast Curry: Push/Enter vs. Eval/Apply for Higher-order Languages // ACM SIGPLAN Notices. — 2004. Т. 39, № 9 (ICFP ’04 dedicated issue). DOI:10.1145/1016848.1016856.
  • Бенджамин Пирс. Типы в языках программирования = Types and Programming Languages. Добросвет, 2012. — 680 с. ISBN 978-5-7913-0082-9.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии