
Joel de Guzman:
std::cout << "Double Square of " << 5 << " is " << ffx(lambda[sqr(_1)], 5.0)() << std::endl;
This is not quite what I was after. As I understood your original problem, we are looking for a construct lflx such that: lflx( f ) yields a function ffx such that ffx( x ) yields f( f( x ) ). In other words, we want lflx( sqr )( 5.0 ) to give us sqr(sqr(5.0)). (The case where f and x are given at the same time is so easy that even boost::bind can do it.) I was also trying to express this double lambda lflx as a Phoenix expression: auto lflx = <phoenix expression here>; My original attempt: lambda( _f = _1 )[ bind( _f, bind( _f, _1 ) ) ] made sense to me, and I still don't understand why it doesn't work. Maybe if we start from something simpler I'd be able to find my error. What is the Phoenix way to take a binary function f( x, y ) and construct an unary function lxly for which lxly( x ) returns a unary function ly such that ly( y ) returns f( x, y )? (Classic curry, in other words.) I'd have expected lambda( _x = _1 )[ bind( f, _x, _1 ) ]