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)
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)
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]
f[Plus[a, b]] /. f[g_[l1__]] :> f[l1]gives:f[a, b]– Daniel Huber Mar 08 '21 at 12:50