# 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?

Clear@@(ToExpression/@fullpara)


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

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:

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


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):

MakeExpression[fullpara]

{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 *)