RE: ReplaceList -- Unexpected Answer
- To: mathgroup at smc.vnet.net
- Subject: [mg46805] RE: [mg46788] ReplaceList -- Unexpected Answer
- From: "David Park" <djmp at earthlink.net>
- Date: Tue, 9 Mar 2004 04:30:48 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Harold,
Because ReplaceList is not working the way you are thinking. It only applies
the rule to the ENTIRE expression.
However, in the ReplaceList Examples the following routine is given...
ReplaceAllList[expr_, rules_] :=
Module[{i},
Join[ReplaceList[expr, rules],
If[AtomQ[expr], {},
Join @@ Table[
ReplacePart[expr, #, i] & /@ ReplaceAllList[expr[[i]], rules],
{i,
Length[expr]}]]]]
ReplaceAllList[ {f[h[4], h[4]], f[h[4], h[5]]}, f[x : h[_], x_] -> r[x] ]
{{r[h[4]], f[h[4], h[5]]}}
David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/
From: Harold Noffke [mailto:Harold.Noffke at wpafb.af.mil]
To: mathgroup at smc.vnet.net
MathGroup:
In The Mathematica 5 Book, Section 2.3.3 Naming Pieces of Patterns, we
find the following pattern matching exercise ...
Now both arguments of f are constrained to be the same, and only the
first case matches.
In[5]:=
{f[h[4], h[4]], f[h[4], h[5]]} /. f[x:h[_], x_] -> r[x]
Out[5]=
{r[h[4]],f[h[4],h[5]]}
Now, let's use ReplaceList to get more insight into this matching
process ...
In[6]:=
ReplaceList[ {f[h[4],h[4]],f[h[4],h[5]]},f[x:h[_],x_] -> r[x] ]
Out[6]=
{}
I do not understand why ReplaceList returns {} instead of { r[h[4]] }.
Regards,
Harold