[Date Index]
[Thread Index]
[Author Index]
Re: precedence for ReplaceAll?
*To*: mathgroup at smc.vnet.net
*Subject*: [mg110543] Re: precedence for ReplaceAll?
*From*: Albert Retey <awnl at gmx-topmail.de>
*Date*: Fri, 25 Jun 2010 07:25:27 -0400 (EDT)
*References*: <hvv4ti$fc$1@smc.vnet.net>
Am 24.06.2010 10:27, schrieb Matthias Fripp:
> I am having trouble using ReplaceAll to replace symbols that already
> have a delayed assignment.
>
> e.g., this input:
>
> In[287]:=
> a := A c
> b := B c
> a /. {a -> x, b -> y}
> b /. {a -> x, b -> y}
> a + b /. {a -> x, b -> y}
> a * b /. {a -> x, b -> y}
>
> gives this output:
>
> Out[289]= x
>
> Out[290]= y
>
> Out[291]= x + y
>
> Out[292]= A B c^2
>
> All of this works as expected except for the final term. I would have
> expected to get the result "x y". Is there any way to force
> Mathematica to produce that result?
>
> If on the other hand the original assignment is a := A + c and b := B
> + c, I get an unexpected output for the sum, but the expected output
> (x y) for the product. If I insert d instead of one of the c's, I get
> various other (unpredictable) kinds of result.
>
> My first guess is that Mathematica is doing a sort of "double
> ReplaceAll", where it first tries the pattern given in the delayed
> assignment, and any symbols matched by that are not tested against the
> explicit ReplaceAll. But that doesn't explain why the sum works and
> not the product. Am I thinking about this the wrong way?
No, what actually happens is that a and b are evaluated to A*c and B*c
respectively, even before the ReplaceAll sees them. Then the ReplaceAll
sees
A*c+B*c /. {A*c -> x, B*c -> y}
A*B*c^2 /. {A*c -> x, B*c -> y}
where it will find matches in the first case but not in the second and
so does nothing. There are two things you need to understand: first is
the evaluation order, second is the fact that replacement rules work on
structure, not on mathematical relations. Both are topics that you will
a lot of information in the documentation and in the archive of this
group. I would recommend to search for "evaluation order" and "pattern
matching" in the documentation and read, well as much as you want to
learn...
hth,
albert
Prev by Date:
**Display question**
Next by Date:
**Re: precedence for ReplaceAll?**
Previous by thread:
**precedence for ReplaceAll?**
Next by thread:
**Re: precedence for ReplaceAll?**
| |