|
Boost Users : |
Subject: Re: [Boost-users] [proto] need explanation in implementing distributive law
From: Mauro Bianco (mbianco_at_[hidden])
Date: 2010-10-05 08:43:52
Hi all,
It is probably already been discovered by everyone at this point, but
the code proposed by Andrew does not to work properly to apply
distributivity more than once in an expression [works for a*(b+c) but
not for a*(b+c*(d+c)) ]
Here a modified version that seems to work recursively.
How does it look?
struct distr :
proto::or_<
proto::when<
proto::multiplies< proto::_, proto::plus< proto::_, proto::_ > >,
proto::call<distr( // THIS IS TO RECURSE
proto::_make_plus(
proto::_make_multiplies(
proto::_left,
proto::_left( proto::_right )
),
proto::_make_multiplies(
proto::_left,
proto::_right( proto::_right )
)
)
)
>
>,
proto::otherwise<proto::nary_expr<proto::_, proto::vararg<distr> > > >
{};
Regards,
Mauro.
On 22.03.2010 22:11, Andrew Durward wrote:
> As a follow-up, the attached code seems to compile and yield the expected
> result.
>
> andrew
>
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net