Re: ClearAll error message
- To: mathgroup at smc.vnet.net
- Subject: [mg92357] Re: ClearAll error message
- From: Szabolcs Horvát <szhorvat at gmail.com>
- Date: Mon, 29 Sep 2008 07:05:49 -0400 (EDT)
- Organization: University of Bergen
- References: <email@example.com>
carlos at colorado.edu wrote: > Just out of curiosity. The following ClearAll works as expected. > > name=Symbol["A"]; ClearAll[name]; This series of commands will not clear the definitions associated with symbol A. It will only clear the symbol name. > > But this elicits an error message: > > ClearAll[Symbol["A"]]; > > Why? A non-standard argument evaluation? After reading the documentation ("Symbol["name"] refers to a symbol with the specified name."), one might think that Symbol["A"] is equivalent to A. But it turns out that this is not exactly true. Symbol["A"] becomes A only after it is evaluated. Since ClearAll has the attribute HoldAll, it will not evaluate Symbol["A"] before checking that it is atomic, and it will see a compound expression. The good news is that ClearAll works with symbol *names* (strings) directly, so you can just use ClearAll["A"]. Another solution for similar situations is to use ToExpression["A", InputForm, ClearAll]. > > [The message came deep from the bowels of a complicated code > to find tensor invariants. A module received a string from which to > build related symbol names with that string as root] Before resorting to building symbol names as strings (e.g. name1, name2, etc.), it is a good idea to consider using expressions (name, name, etc.).