Re: pattern matching against the Dt function?
- To: mathgroup at smc.vnet.net
- Subject: [mg85280] Re: pattern matching against the Dt function?
- From: "Adam M." <adamm at san.rr.com>
- Date: Tue, 5 Feb 2008 06:03:42 -0500 (EST)
- References: <fo6h46$r20$1@smc.vnet.net> <47A738A7.4040408@gmail.com>
Thank you to everyone. I understand what's going on now. And I'm glad to find out about Trace[]. Thank you again! -- Adam Jean-Marc Gulliet wrote: > Adam M. wrote: >> Hello, >> >> I'm having trouble matching the Dt function with a pattern, even >> though it works for all other functions I've tried. >> >> (*It doesn't match Dt[b] here.*) >> In[101]:= {f[a], Dt[b]} /. Dt[n_]->n >> Out[101]= {f[a], Dt[b]} >> >> (*But it matches f[a] with no problem.*) >> In[100]:= {f[a], Dt[b]} /. f[n_]->n >> Out[100]= {a, Dt[b]} >> >> (*In a process of elimination, I tried another built-in function, D, >> and it worked fine.*) >> In[99]:= {f[a], D[b]} /. D[n_]->n >> Out[99]= {f[a], b} >> >> (*I tried another function more than one character long, Sin, and that >> works.*) >> In[102]:= {f[a], Sin[b]} /. Sin[n_]->n >> Out[102]= {f[a], b} >> >> (*The full forms all seem to follow the same pattern.*) >> In[103]:= Sin[b] // FullForm >> Out[103]//FullForm= Sin[b] >> >> In[104]:= Dt[b] // FullForm >> Out[104]//FullForm= Dt[b] >> >> In[105]:= f[b] // FullForm >> Out[105]//FullForm= f[b] >> >> (*I thought it might be related to the evaluation of the Dt function, >> so I tried Holding it. No luck.*) >> In[111]:= {f[a], Hold[Dt[b]]} /. Dt[n_]->n >> Out[111]= {f[a], Hold[Dt[b]]} >> >> (*However, it has no problem matching f[a] in a Hold.*) >> In[112]:= {Hold[f[a]], Dt[b]} /. f[n_]->n >> Out[112]= {Hold[a], Dt[b]} >> >> (*I tried looking at the attributes to find out if there was something >> special about the Dt function, but it doesn't seem like it...*) >> In[116]:= Attributes[Sin] >> Out[116]= {Listable, NumericFunction, Protected} >> >> In[117]:= Attributes[D] >> Out[117]= {Protected, ReadProtected} >> >> In[118]:= Attributes[Dt] >> Out[118]= {Protected} >> >> I've read every section on pattern matching in the documentation >> center, and I'm at a complete loss to explain why I can't seem to >> match the Dt function with the Dt[n_] pattern when I can match these >> other functions. I know I can use the _Dt pattern to match it, but >> then I don't get control over matching the arguments... >> >> Thank you. >> >> Very curious, >> -- Adam M. >> > > Hi Adam, > > For some reason the total derivative function Dt[n_] is expanding by the > pattern matcher as the product of the symbol Dt by the first partial > derivative of the pattern n_. No wonder that it cannot find Dt[b] after > that! You can see the expansion by using either FullForm or Trace, as in > the following example: > > In[1]:= FullForm[Dt[n_]] > > Out[1]//FullForm= Times[Dt[n], Derivative[1, 0][Pattern][n, > > Blank[]]] > > In[2]:= {f[a], Dt[b]} /. Dt[n_] -> n // Trace > > Out[2]= > (1,0) > {{{Dt[n_], Dt[n] Pattern [n, _]}, > > (1,0) > Dt[n] Pattern [n, _] -> n, > > (1,0) > Dt[n] Pattern [n, _] -> n}, > > {f[a], Dt[b]} /. > > (1,0) > Dt[n] Pattern [n, _] -> n, > > {f[a], Dt[b]}} > > In[3]:= $Version > > Out[3]= 6.0 for Mac OS X x86 (64-bit) (June 19, 2007) > > Regards,