MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Clearing a symbol known only through a definition

  • To: mathgroup at smc.vnet.net
  • Subject: [mg66673] Re: [mg66658] Clearing a symbol known only through a definition
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Sat, 27 May 2006 03:50:39 -0400 (EDT)
  • References: <200605260817.EAA01750@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On 26 May 2006, at 17:17, Andrew Moylan wrote:

> Suppose I have a symbol "a" that is defined to be equal to another
> symbol. (E.g. It might be that a := b.) How can I clear the value  
> of the
> symbol 'pointed to' by "a", without knowing explicity what symbol  
> that is?
>
> Clear[a] won't do, of course.
> Clear[Evaluate[a]] won't do, because that will evaluate to
> Clear[Evaluate[b]], which will in turn (in general) evalulate to
> Clear["whatever b evalulates to"].

I am not sure if I understand you correctly, but here is a try. I am  
assuming you have a situation like this:

In[1]:=
a := b

In[2]:=
b=3;

and you would like to clear the value of b without directly referring  
to b? Is that right? Here is a hack that I just came up with which  
appears to do that:

OwnValues[a] /. HoldPattern[Verbatim[HoldPattern[a]] :> x_] :> Clear[x];

In[4]:=
b

Out[4]=
b

In[5]:=
a

Out[5]=
b

So the value of b has been Cleared.

Now for your "particular" problem:


>
> ----
> Alternatively, here is the particular problem I want to solve:
>
> For any expression e, either e is a symbol, or Head[e] is, or
> Head[Head[e]] is, etc. Call this the "topmost symbol" in the  
> expression.
> Thus, the topmost symbol in f[x][y][z] is f.
>
> I want to write a function that takes an expression and calls Clear 
> [] on
> its topmost symbol. Can anyone think of a simple way to write such a
> function?
>


Very simple, no. But here one way that seems reasonably so:


In[1]:=
f:=g

In[1]:=
Clear @@ ToExpression[First[Characters[
      ToString[Unevaluated[f[x][y][z]]]]], InputForm, Hold]

In[2]:=
f

Out[2]=
f

The "topmost symbol" has been cleared. One can also make a function  
that does this:

In[1]:=
SetAttributes[F,HoldFirst];

In[2]:=
F[expr_]:=Clear@@ToExpression[First[Characters[ToString[Unevaluated 
[expr]]]],\
InputForm,Hold]

In[3]:=
f:=g;

In[4]:=
F[f[x][y][z]]

In[5]:=
f

Out[5]=
f


Andrzej Kozlowski
Tokyo, Japan


  • Prev by Date: Re: Re: Graphics3D axes
  • Next by Date: RE: Graphics3D axes
  • Previous by thread: Re: Clearing a symbol known only through a definition
  • Next by thread: Re: Clearing a symbol known only through a definition