|
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.
Thanks,
Karsten
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 boostpro.com