Boost logo

Boost Users :

Subject: Re: [Boost-users] [proto] need explanation in implementing distributive law
From: Eric Niebler (eric_at_[hidden])
Date: 2010-10-05 16:17:22


On 10/5/2010 5:43 AM, Mauro Bianco wrote:
> 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)) ]

Funny, I never saw the original message. Perhaps it's stuck in a
moderation queue or lost in the ether(net).

> 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> > > >
> {};

Yes, this looks reasonable.

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

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