       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:= {f[a], Dt[b]} /. Dt[n_]->n
>Out= {f[a], Dt[b]}
>
>
The problem is that the rule is evaluating:

In:= Dt[n_] -> n // InputForm

Out//InputForm=
Dt[n]*Derivative[1, 0][Pattern][n, _] -> n

So, use Verbatim or HoldPattern to prevent evaluation:

In:= {f[a], Dt[b]} /. Verbatim[Dt][n_] -> n

Out= {f(a),b}

In:= {f[a], Dt[b]} /. HoldPattern[Dt][n_] -> n

Out= {f(a),b}

Carl Woll
Wolfram Research

>(*But it matches f[a] with no problem.*)
>In:= {f[a], Dt[b]} /. f[n_]->n
>Out= {a, Dt[b]}
>
>(*In a process of elimination, I tried another built-in function, D, and
>it worked fine.*)
>In:= {f[a], D[b]} /. D[n_]->n
>Out= {f[a], b}
>
>(*I tried another function more than one character long, Sin, and that
>works.*)
>In:= {f[a], Sin[b]} /. Sin[n_]->n
>Out= {f[a], b}
>
>(*The full forms all seem to follow the same pattern.*)
>In:= Sin[b] // FullForm
>Out//FullForm= Sin[b]
>
>In:= Dt[b] // FullForm
>Out//FullForm= Dt[b]
>
>In:= f[b] // FullForm
>Out//FullForm= f[b]
>
>(*I thought it might be related to the evaluation of the Dt function, so
>I tried Holding it. No luck.*)
>In:= {f[a], Hold[Dt[b]]} /. Dt[n_]->n
>Out= {f[a], Hold[Dt[b]]}
>
>(*However, it has no problem matching f[a] in a Hold.*)
>In:= {Hold[f[a]], Dt[b]} /. f[n_]->n
>Out= {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:= Attributes[Sin]
>Out= {Listable, NumericFunction, Protected}
>
>In:= Attributes[D]
>
>In:= Attributes[Dt]
>Out= {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,