Skip to main content

You are not logged in. Your edit will be placed in a queue until it is peer reviewed.

We welcome edits that make the post easier to understand and more valuable for readers. Because community members review edits, please try to make the post substantially better than how you found it, for example, by fixing grammar or adding additional resources and hyperlinks.

Required fields*

3
  • 1
    $\begingroup$ We know that matching works from the outermost level inward from the documentation statement that after a match no further rules are tried on that part, or on any of its subparts. Example 1 matches foo heads only. As they have no subparts to skip, the inner foo is visited and replaced. Example 2 matches foo[x__] which does have subparts that are skipped, and we can see the inner foo subpart is left unchanged. Examples 3 and 4 give the same results as examples 1 and 2 respectively. Sow/reap tells us nothing here since the values are all being sown before replacement occurs. $\endgroup$ Commented Dec 8, 2014 at 3:47
  • 1
    $\begingroup$ To see this all in action, constrast foo[2, foo[1], 3] /. e:foo[x__] /; (Print[e];True) :> fff[x] to Replace[foo[2, foo[1], 3], e:foo[x__] /; (Print[e]; True) :> fff[x], {0, Infinity}] $\endgroup$ Commented Dec 8, 2014 at 3:48
  • $\begingroup$ @WReach Thank you for your clear explanations. I modified my post (and also removed my shameful mistake concerning Sow :(() $\endgroup$ Commented Dec 8, 2014 at 11:38