C++ boost bind library и частичная функция clojure очень похожи. Например:C++ boost :: bind vs clojure partial function
int x = 8;
bind(std::less<int>(), _1, 9)(x); // x < 9
Это похоже на частичную функцию Clojure в:
((partial > 9) 8)
Разница заключается в том, что partial
допускает только первые п параметров для связывания, тогда как boost::bind
позволяет заполнители, указывающие, какие параметры связаны и которые несвязаны. Так boost::bind
на самом деле гораздо более общее и полезное:
bind(f, _2, _1)(x, y); // f(y, x)
bind(g, _1, 9, _1)(x); // g(x, 9, x)
Я интересно, если есть что-то похожее на boost::bind
в Clojure (или Clojure-вно)? И почему частичное не было написано более общим (и полезным), поскольку boost::bind
есть?
Почему бы просто не сделать лямбда? – kennytm
тем рассуждением, зачем включать частично в язык вообще? Это просто частный случай лямбды. Я лично считаю, что частичное яснее. – Kevin
Но C++ 03 не имеет лямбда. – kennytm