MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

RE: ReplaceList -- Unexpected Answer


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



  • Prev by Date: Re: ReplaceList -- Unexpected Answer
  • Next by Date: Re: Problem with Mathematica driving me nuts
  • Previous by thread: Re: ReplaceList -- Unexpected Answer
  • Next by thread: RE: ReplaceList -- Unexpected Answer