c++ boost 绑定库和clojure 的部分函数非常相似。例如:
int x = 8;
bind(std::less<int>(), _1, 9)(x); // x < 9
这类似于 clojure 的偏函数:
((partial > 9) 8)
不同之处在于partial
只允许绑定前 n 个参数,而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-contrib)中是否有类似的东西?为什么 partial 没有按原样写得更通用(和有用)boost::bind
?