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