# Clear complains that a variable is not a symbol or a string?

Here's a small listing where I've used EscqEsc to typeset θ in the notebook:

Clear[ f, θ, Subscript[x, r] ]
Subscript[x, r] := 3
f[θ_] := Subscript[x, r] Cos[θ]

Plot[f[θ], {θ, 0, Pi}]


(in my notebook this looked like $x_r$, not Subscript[x, r] for example).

This produces a message from Clear of the form:

Clear::ssym : x_r is not a symbol or a string


What is curious is that I appear to be able to assign to this variable $x_r$ without any trouble, yet it is apparently treated differently than my other symbols f and θ.

How exactly does Mathematica define a symbol. Why can I use $x_r$ like a variable, yet it does not have this symbol characterization?

-
 If you are unfamiliar with DownValue, OwnValue and so on it is worth reading this post mathematica.stackexchange.com/questions/96/… in addition to the answers below. – Mike Honeychurch Jan 20 '12 at 23:22 – Szabolcs Jan 24 '12 at 15:46

Your code reveals exactly why Clear complains: Subscript[x, r] is not a Symbol nor a String. When you assign a value to it, you're setting a DownValue not an OwnValue; in other words, you're setting the value of a function not a variable. To use $x_r$ as a symbol, use the Notation package's function, Symbolize. I'd recommend using it from the palette directly, as it has all of the intricacies already set up for you.

-
...and you can use ClearNotations to clear your Symbolized symbols. – Mike Honeychurch Feb 23 '12 at 23:28

As the error message indicates Clear does not work that way. There are several assignment forms that automatically create a definition to something other than a raw symbol:

x[5] = 1;
Subscript[x, 1] = 2;
x /: Subscript[x, 2] = 3;
N[x] = 3.14159;

DownValues[x]
DownValues[Subscript]
UpValues[x]
NValues[x]

{HoldPattern[x[5]] :> 1}

{HoldPattern[Subscript[x, 1]] :> 2}

{HoldPattern[Subscript[x, 2]] :> 3}

{HoldPattern[N[x, {MachinePrecision, MachinePrecision}]] :> 3.14159}


(See documentation for: DownValues, UpValues. NValues is not directly documented.)

You cannot clear any of these forms in the fashion you attempted:

(* Failure

Clear[ x[5] ]
Clear[ Subscript[x, 1] ]
Clear[ Subscript[x, 2] ]
Clear[ N[x] ]

*)


You can clear some of them with Unset (short form =.):

x[5] =.
Subscript[x, 1] =.
N[x]  =.


Unset[Subscript[x, 2]] does not work because it was created with TagSet (/:), and for that you need TagUnset:

x /: Subscript[x, 2] =.

-
 I thought about mentioning Unset, but didn't. So, you get the +1. – rcollyer Jan 20 '12 at 16:38

You get that error because Mathematica does not recognize $x_r$ as a symbol. To instruct it to treat symbols with subscripts also as symbols, you'll need to use the Notations package like so:

<< Notation
Symbolize[ParsedBoxWrapper[SubscriptBox["_", "_"]]]


Now you should have no problems in clearing your subscripted symbol.

-

That is because the value is set to a DownValue of Subscript..

DownValues[Subscript]
`
-