The title refers to the general problem of writing patterns to match pattern-containing expressions (hence "meta-match").
Here's an example.
In the following rules
0 -> "A"
foo[1] -> bar[2]
{1, 10} -> 11
the left-hand-sides contain no patterns, at least explicitly. I'll refer to such rules as being "pattern-free".
Now, given a list of rules (rules), how can one obtain the sublist consisting only of the pattern-free ones?
This naive solution won't work:
Cases[rules,x_ /; FreeQ[x, (Blank[___] | BlankSequence[___] | BlankNullSequence[___])]]
I can solve this problem at least with the following hack
Cases[(rules /. (Blank | BlankSequence | BlankNullSequence) -> $patt),
y_ /; FreeQ[y, $patt[___]]]
or
Cases[(rules /. x:(Blank | BlankSequence | BlankNullSequence) -> $patt[x]),
y_ /; FreeQ[y, $patt[_][___]]
] /. $patt[z_] -> z
...but I figure that Mathematica may provide standard constructs to deal with such situations. If so, I'd like to learn what they are.
VerbatimandPatternHoldare useful. – Szabolcs Jan 16 '15 at 15:07HoldPattern. – Daniel Lichtblau Jan 16 '15 at 15:44x[Verbatim[2/;True]]orx[HoldPattern[2]]? – Rojo Jan 16 '15 at 20:53