How to Clear variables represented as a list of strings?



Say I have a string list called fullpara

fullpara={"width", "long", "line", "distance"}

And there are corresponding variables to each string, and I want to Clear these variables

Clear[width, long, line, distance]

How to do it in a way to manipulate fullpara as a whole?


obviously won't work because ToExpression will evaluate the variable that already has a value.


Posted 2013-11-25T10:21:55.993

Reputation: 14 483

Related: "Elegant manipulation of the variables list."

– Alexey Popkov – 2013-11-26T12:38:39.987



According to the documentation of Clear or ClearAll it is possible to provide symbols in form of regular expression (limited), in particular as string with exact symbol name.

Clear @@ {"width", "long", "line", "distance"}

Let's say there is no possibility to do that, one way would be:

    ToExpression[{"width", "long", "line", "distance"}, InputForm, Hold], 
    {2}]; // ReleaseHold


Posted 2013-11-25T10:21:55.993

Reputation: 129 207


As Kuba notes you can use strings in Clear directly. However having an understanding of how to work with such problems is helpful so here are some other ways.

A flexible approach is to use MakeExpression to convert strings to expressions in held form (HoldComplete specifically):

{HoldComplete[width], HoldComplete[long], HoldComplete[line], HoldComplete[distance]}

You can use Apply Join to put these in a single HoldComplete head and then Apply Clear or ClearAll:

Join @@ MakeExpression[fullpara]
HoldComplete[width, long, line, distance]
Clear @@ Join @@ MakeExpression[fullpara]  (* clears Symbols *)

A more specific approach is to use the third argument of ToExpression to Clear individual Symbols directly:

ToExpression[fullpara, StandardForm, Clear]; (* clears Symbols *)


Posted 2013-11-25T10:21:55.993

Reputation: 259 163