Re: Transformation rules - explain please
- To: mathgroup at smc.vnet.net
- Subject: [mg74033] Re: Transformation rules - explain please
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Wed, 7 Mar 2007 03:08:08 -0500 (EST)
- References: <esjg77$279$1@smc.vnet.net>
Hi,
I assume you know the difference between
Set[] (=) and Equal[] (==) and you second version
uses Set[] instead of equal.
To match a pattern like {x___, old_, r___}
the pattern matcher must search the possible
matches. But you second version place the condition
on the pattern so it fails for the first time
before x___ and r___ are bounded.
Regards
Jens
wooks wrote:
> This is supposed to substitute the first occurrence of old1 or old2
> with new.
>
> Why does this work
>
> Clear[old1, old, old2, lat, MySubst]
> lat = {banana, ice, cream, smeared, chocolate, topping};
> MySubst[new_, old1_, old2_, {x___, old_, r___}] := {x, new, r} /;
> Or[old == old1, old == old2];
> MySubst[strawberry, chocolate, cream, lat]
>
> but not this (with the conditional on the lhs).
>
> Clear[old1, old, old2, lat, MySubst]
> lat = {banana, ice, cream, smeared, chocolate, topping};
> MySubst[new_, old1_, old2_, {x___, old_, r___} /; Or[old = old1, old
> = old2]] := {x, new, r};
> MySubst[strawberry, chocolate, cream, lat]
>
> I like the idea of using conditional rules like this but have found it
> very hit and miss. Often times things don't work so I am seeking
> further enlightment.
>
> I'd be interested to see what would need to be done to make the
> conditional work on the lhs.
>
>