Boost logo

Proto :

Subject: Re: [proto] Manipulating an expression tree
From: Karsten Ahnert (karsten.ahnert_at_[hidden])
Date: 2011-04-06 18:45:24

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.



On 04/06/2011 10:53 PM, Bart Janssens wrote:
> On Wed, Apr 6, 2011 at 10:29 PM, Karsten Ahnert
> <karsten.ahnert_at_[hidden]> 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 list run by eric at