8
$\begingroup$

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.

$\endgroup$
15
$\begingroup$

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
$\endgroup$
9
$\begingroup$

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 *)
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.