Re: pattern matching against the Dt function?
- To: mathgroup at smc.vnet.net
- Subject: [mg85267] Re: [mg85238] pattern matching against the Dt function?
- From: Carl Woll <carlw at wolfram.com>
- Date: Tue, 5 Feb 2008 05:57:00 -0500 (EST)
- References: <200802040806.DAA27693@smc.vnet.net>
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]} > > The problem is that the rule is evaluating: In[154]:= Dt[n_] -> n // InputForm Out[154]//InputForm= Dt[n]*Derivative[1, 0][Pattern][n, _] -> n So, use Verbatim or HoldPattern to prevent evaluation: In[155]:= {f[a], Dt[b]} /. Verbatim[Dt][n_] -> n Out[155]= {f(a),b} In[156]:= {f[a], Dt[b]} /. HoldPattern[Dt][n_] -> n Out[156]= {f(a),b} Carl Woll Wolfram Research >(*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. > >
- References:
- pattern matching against the Dt function?
- From: "Adam M." <adamm@san.rr.com>
- pattern matching against the Dt function?