[#] Элементы функционального программирования в C++: частичное применение
habrabot(difrex,1) — All
2016-10-24 14:30:04


<>

Не буду сильно углубляться в теорию. Что такое частичное применение легко найти в интернете. В том числе [на Википедии][1].



Если кратко, то это механизм, позволяющий зафиксировать `k` аргументов функции от `n` аргументов, сделав из неё функцию от `(n - k)` аргументов.


// Пусть имеется функция f от четырёх аргументов:
int f (int a, int b, int c, int d)
{
return a + b + c + d;
}

// Фиксируем первые два аргумента:
auto g = part(f, 1, 2); // 1 + 2 + ...

// Добрасываем оставшиеся два:
assert(g(3, 4) == 10); // ... + 3 + 4 = 10

На эту тему уже существует масса публикаций, в том числе и на Хабре:


1. [C++ Variadic templates. Каррирование и частичное применение][2]
2. [Частичное применение и каррирование в C++][3]
3. [Каррируем на C++][4]

А ветка "[How should I make function curry?][5]" на stackoverflow — просто кладезь для тех, кто впервые сталкивается с этой темой.



К сожалению, количество пока не переросло в качество, и хорошего, пригодного к использованию варианта я так и не увидел.



При этом любопытно вот что.



**Замечательный факт №1**. В упомянутых статьях присутствуют все техники, которые нужны для реализации правильного (по моему мнению) частичного применения.



Надо только всё внимательно проанализировать и сложить кубики в правильном порядке.



Именно этим я и собираюсь заняться в данной статье.

[Читать дальше →][6]

[1]: https://ru.wikipedia.org/wiki/Частичное_применение
[2]: https://habrahabr.ru/post/133084
[3]: https://habrahabr.ru/post/149056
[4]: https://habrahabr.ru/post/238879
[5]: http://stackoverflow.com/questions/26655685/how-should-i-make-function-curry
[6]: https://habrahabr.ru/post/313370/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut