# Re: [proto] Manipulating an expression tree

```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
> <karsten.ahn...@ambrosys.de> 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
proto@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/proto
```