Частичное применение

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Не следует путать с каррированием.

В компьютерных науках, частичное применение (или частичное применением функции) — процесс фиксации части аргументов функции, который создает другую функцию, меньшей арности. Имея функцию \scriptstyle f \colon (X \times Y \times Z) \to N , можно зафиксировать(или 'привязать') первый аргумент, возвращая фукцию type  \scriptstyle\text{partial}(f) \colon (Y \times Z) \to N . Вычисление этой функции может быть представлено как f_{partial}(2, 3). Результатом частичного применения функции в данном случае является функция с двумя аргументами.

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

В простых терминах, частичное применение функции выглядит так — фиксируются первые аргументы функции и возвращается функция от оставшихся аргументов. К примеру, если функция div выполняет операцию деления x / y, тогда div с параметром x зафиксированным в значении 1 (то есть div 1) это другая функция, такая же, как функцияinv которая возвращает обратную величину от его аргумента, определенная какinv(y) = 1 / y.

На практике частичное применение используется потому, что функции, полученные путем фиксации некоторого количества аргументов, оказываются полезными. К примеру, многие языки программирования имеют функцию или оператор, схожие с plus_one. Частичное применение облегчается определение подобных функций, путем, к примеру создания функции, которая представляет собой оператор сложения с 1 зафиксированным в качестве его первого аргумента.

Реализации[править | править вики-текст]

В языках программирования, таких как ML и Haskell функции объявляются в каррированной форме по умолчанию. Предоставление неполного числа аргументов называют частичным применением.

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

Scala реализует опциональное частичное применение с списками параметров, то есть def add(x)(y) { x+y}; add(1) возвращает функцию инкремента

Стандартная библиотека C++ предоставляет функцию bind(function, args..), которая возвращает функтор, являющийся результатом частичного применения данного числа аргументов к функции.

См. также[править | править вики-текст]

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

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

Ссылки[править | править вики-текст]