我对使用定点组合器的实际例子很感兴趣(例如C++中的y-combinator.你有没有使用带有egg的固定点组合器或绑定真实的实时代码?
我在蛋中发现这个例子有点密集:
void egg_example() { using bll::_1; using bll::_2; int r = fix2( bll::ret( // \(f,a) -> a == 0 ? 1 : a * f(a-1) bll::if_then_else_return( _2 == 0, 1, _2 * lazy(_1)(_2 - 1) ) ) ) (5); BOOST_CHECK(r == 5*4*3*2*1); }
你能解释一下这一切是怎么回事吗?
是否有一个很好的简单例子,或许使用bind可能比这个更少的依赖?
这是相同的代码转换为boost::bind
通知y-combinator及其主要功能中的应用程序站点.我希望这有帮助.
#include#include #include // Y-combinator compatible factorial int fact(boost::function f,int v) { if(v == 0) return 1; else return v * f(v -1); } // Y-combinator for the int type boost::function y(boost::function ,int)> f) { return boost::bind(f,boost::bind(&y,f),_1); } int main(int argc,char** argv) { boost::function factorial = y(fact); std::cout << factorial(5) << std::endl; return 0; }
#include#include template auto y (std::function f) -> std::function { return std::bind(f, std::bind(&y , f), std::placeholders::_1); } int main(int argc,char** argv) { std::cout << y < std::function , int> ([](std::function f, int x) { return x == 0 ? 1 : x * f(x - 1); }) (5) << std::endl; return 0; }