4

When I execute f[g[a, b]] /. f[g[l__]] :> f[l] I get f[a, b] as expected.

When I execute f[a + b] /. f[Plus[l__]] :> f[l] I get f[a + b]. (I expect f[a, b] again)

Why? (Wolfram Mathematica 12.2.0)

1 Answers1

11

This happens because Plus[l__] evaluates to l__ before the pattern is even replaced. Try instead:

f[a + b] /. f[HoldPattern@Plus[l__]] :> f[l]
Fidel I. Schaposnik
  • 2,055
  • 7
  • 16