4
$\begingroup$

I am trying to rewrite patterns. For example, I'd like to rewrite the pattern

jFoo_Integer

which has FullForm

Pattern[jFoo,Blank[Integer]]

into just

Blank[Integer]

In other words, I want to strip out the names of patterns. I tried the following

jFoo_Integer /. {Pattern[nym_, Blank[typ_]] :> {nym, typ}}

which does not match or reduce and produces the (IMO bogus) error message

Pattern::patvar: First element in pattern Pattern[nym_,Blank[typ_]] is not a valid pattern name. >>

I also tried

    Pattern[jFoo,Blank[Integer]] /. {Pattern[nym_, Blank[typ_]] :> {nym, typ}}
    Pattern[jFoo,Blank[Integer]] /. {Verbatim[Pattern][nym_, Blank[typ_]] :> {nym, typ}}
    jFoo_Integer /. {Verbatim[Pattern][nym_, Blank[typ_]] :> {nym, typ}}
    jFoo_Integer /. {Verbatim[Pattern][nym_, Blank[typ_]] :> {nym, typ}}

all with exactly the same (failed) results.

Any hints, please & thanks?

$\endgroup$
7
$\begingroup$

What you want is probably

jFoo_Integer /. Verbatim[Pattern][nym_, Verbatim[Blank][typ_]] :> {nym, typ}
(* {jFoo, Integer} *)

The usage of Verbatim points it out

Verbatim[expr] represents expr in pattern matching, requiring that expr be matched exactly as it appears, with no substitutions for blanks or other transformations.

$\endgroup$
3
$\begingroup$

I'm not sure how do you want to work with it, but those are ways to go:

List @@ (jFoo_Integer)
{jFoo, _Integer}
(jFoo_Integer) /. x_Pattern :> {x[[1]], x[[2]]}
{jFoo, _Integer}
(jFoo_Integer)[[2]]
_Integer
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.