Re: Why does this pattern fail to match?
- To: mathgroup at smc.vnet.net
- Subject: [mg114164] Re: Why does this pattern fail to match?
- From: Simon <simonjtyler at gmail.com>
- Date: Fri, 26 Nov 2010 05:25:52 -0500 (EST)
- References: <iclfej$lb7$1@smc.vnet.net>
Actually, Trace is quite enlightening:
Your first example is
In[1]:= MatchQ[Times[-1, Power[s, -1]], Times[___, Power[___],
___]] // Trace
Out[2]= {{{Power[___],___},___ ___ ___,___^3},MatchQ[-(1/
s),___^3],False}
So you see that before the pattern is tested, it is evaluated to
Times[___, Power[___], ___] ___^3
Since Power[___] _-> ___ and ___*___*___ --> ___^3
So all you need to do is use HoldPattern:
In[2]:=
MatchQ[Times[-1,Power[s,-1]],HoldPattern[Times[___,Power[___],___]]]
Out[2]= True
Hope that helps,
Simon
On Nov 25, 6:57 pm, kj <no.em... at please.post> wrote:
> I'm tearing my hair out over this one. Could someone please explain
> to me why all the following MatchQ expressions
>
> MatchQ[Times[ -1, Power[s, -1] ],
> Times[___, Power[___], ___]]
>
> MatchQ[Times[ -1, Power[s, -1]],
> Times[___, Power[___] ]]
>
> MatchQ[Times[ -1, Power[s, -1] ],
> Times[___, _Power , ___]]
>
> return False? (In all cases, s is undefined). And yet, this succeed=
s:
>
> MatchQ[Times[ -1, Power[s, -1]],
> Times[___, _Power ]]
>
> Is there a systematic way to debug/troubleshoot such pattern matching
> problems? Trace is useless here.
>
> Also, whatever the reason is for the failure of this pattern to
> match, where is this reason documented? I've gone blind poring
> over the documentation trying to find an answer, without success.
>
> TIA!
>
> ~kj