On Tue, May 29, 2012 at 8:21 PM, Eric Niebler <e...@boostpro.com> wrote: > On 5/29/2012 1:44 AM, Karsten Ahnert wrote: >> I have an arithmetic expression template where multiplication is >> commutative. Is there an easy way to order a chain of multiplications >> such that terminals with values (like proto::terminal< double >) appear >> at the beginning? For example that >> >> arg1 * arg1 * 1.5 * arg1 >> >> will be transformed to >> >> 1.5 * arg1 * arg1 * arg1 >> >> ? >> >> I can imagine some complicated algorithms swapping expressions and child >> expressions but I wonder if there is a simpler way. > > There is no clever built-in Proto algorithm for commutative > transformations like this, I'm afraid.
Just thinking out loud, could something like this work and be made recursive: boost::proto::when < proto::multiplies< <grammar for anything except double>, proto::terminal<double> >, proto::functional::make_multiplies(proto::_right, proto::_left) > ? Cheers, -- Bart _______________________________________________ proto mailing list proto@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/proto