Re: Question about Cases command.

*To*: mathgroup at yoda.physics.unc.edu*Subject*: Re: Question about Cases command.*From*: withoff (David Withoff)*Date*: Tue, 28 Jun 1994 15:45:07 -0500

> In[2]:= myterms = {Derivative[1,2][a][x,y], Derivative[1,1][b][x,y]}; > > In[3]:= Map[Head, myterms] > > (1,2) (1,1) > Out[3]= {a , b } > > Now try to uses Cases: > > In[4]:= Cases[myterms,_Derivative[__][a]] > > Out[4]= {} > > Why didn't it select the "a" term out? Try: > > In[5]:= Cases[myterms, _Derivative[__][_]] > > Out[5]= {} > > In[6]:= Cases[myterms, _Derivative[__][__]] > > 3 2 > d a d b > Out[6]= {------, ------} > 1 2 1 1 > dx dy dx dy > > Ok, now why must I use two underscores in this form? ( In[6] ) > The "a" and the "b" are single elements. > > > Scott A. Herod > Program in Applied Mathematics > University of Colorado, Boulder > (sherod at newton.colorado.edu) Compare In[9]:= FullForm[myterms[[1]]] Out[9]//FullForm= Derivative[1, 2][a][x, y] with In[10]:= FullForm[_Derivative[__][_]] Out[10]//FullForm= Blank[Derivative][BlankSequence[]][Blank[]] The pattern will match anything with a single argument and with a head that matches Blank[Derivative][BlankSequence[]], which means that the head must be something with one or more elements and the head of the head must match Blank[Derivative]. The expression Derivative[1, 2][a][x, y] has two elements, so it fails the first test. The pattern Blank[h] does literal comparisons of the head. It does not use the Head function, and does not allow for the effects of special pattern expressions (things like __). For example: In[13]:= MatchQ[f[0][], Blank[f[0]]] Out[13]= True In[14]:= MatchQ[f[0][], Blank[f[_]]] Out[14]= False In[15]:= MatchQ[f[_][], Blank[f[_]]] Out[15]= True Also, the special input notation _h for Blank[h] works only if h is a symbol. The FullForm must be used if h is not a symbol. That is, _f[0] parses as Blank[f][0], and will match expressions, with element 0 and a head that matches _f, not expressions with a head of f[0]. The pattern that matches expressions with head f[0] must be entered as Blank[f[0]]. Dave Withoff Research and Development Wolfram Research