Great! It works perfectly, alltough I don't understand the code completely yet.
Another question is: can a node have a state. In my algorithm it would be nice, if every proto::multiplies< > node stores some intermediate values which are used during later evaluations of the tree. Thanks, Karsten On 04/06/2011 10:53 PM, Bart Janssens wrote: > On Wed, Apr 6, 2011 at 10:29 PM, Karsten Ahnert > <[email protected]> wrote: >> Is there a direct way to transform an expression tree into another one? >> For example, is it possible that every proto::plus< > node is >> transformed to it left child? I tried to solve this problem via protos >> build-in transforms without success. It seems that they are suited for >> evaluation of an existing tree, but I might be wrong. > > Hi Karsten, > > I'm pretty sure they can do both. For your example, I think something > along the lines of this might work (untested): > > struct LeftPlus : > boost::proto::or_ > < > boost::proto::terminal<boost::proto::_>, > boost::proto::when > < > boost::proto::plus<boost::proto::_, boost::proto::_>, > LeftPlus(boost::proto::_left) > >, > boost::proto::nary_expr< boost::proto::_, boost::proto::vararg<LeftPlus> > > > > {}; > > This should recurse through expressions and replace sequences of > pluses with the left-most terminal. You may need some other criteria > to end the recursion depending on your use case. > > Disclaimer: I'm relatively new to proto myself, so the experts might > have better solutions! > > Cheers, > -- Dr. Karsten Ahnert Ambrosys GmbH - Gesellschaft für Management komplexer Systeme Geschwister-Scholl-Str. 63a D-14471 Potsdam Tel: +4917682001688 Fax: +493319791300 Ambrosys GmbH - Gesellschaft für Management komplexer Systems Gesellschaft mit beschränkter Haftung Sitz der Gesellschaft: Geschwister-Scholl-Str. 63a, 14471 Potsdam Registergericht: Amtsgericht Potsdam, HRB 21228 P Geschäftsführer: Dr. Karsten Ahnert, Dr. Markus Abel _______________________________________________ proto mailing list [email protected] http://lists.boost.org/mailman/listinfo.cgi/proto
