Re: wierd REmove behavior
- To: mathgroup at smc.vnet.net
- Subject: [mg2372] Re: wierd REmove behavior
- From: wagner at goober.cs.colorado.edu (Dave Wagner)
- Date: Sun, 29 Oct 1995 22:48:56 -0500
- Organization: University of Colorado, Boulder
In article <46pr4d$fve at ralph.vnet.net>, richard j. gaylord <gaylord at ux1.cso.uiuc.edu> wrote: >one of my students came to see me and asked what was going on in the following. > >In[6]:= >Remove[c] > >In[7]:= >c = 6 >Out[7]= >6 > >In[8]:= >?c >Global`c >c = 6 > > >In[9]:= >Remove[c];c = 6 >Out[9]= >6 > >In[10]:= >?c >Information::notfound: Symbol c not found. > >In[11]:= >Trace[Remove[c]; c = 6] >Out[11]= >{Remove[Removed[c]]; Removed[c] = 6, > {Remove[Removed[c]], Null}, {Removed[c] = 6, 6}, 6} Someone from WRI may post a more authoritative answer on this one, but here's my understanding of how this works: When you type Remove[c]; c=6 the parser parses this input and looks up the symbol c in the symbol table. Both c's refer to the same symbol table entry. The symbol table entry has a reference count which in this case is at least two (in fact, it's larger because of the earlier references to c). Removing c marks the symbol table entry as removed, but because the reference count is non-zero, doesn't actually remove the symbol table entry from the symbol table. The c=6 then refers to a symbol table entry whose name is "c" but which has been removed, hence it prints as "Removed[c]". This is a pathological beastie that it's very hard to do anything useful with. The same type of behavior is going on when you do something like this: x = 6; temp`x = 7; Now if you evaluate x you will get 6; if you evaluate the following: Begin[temp`]; x End[temp`]; you will get 7. BUT if the following will give you 6 again: Begin[temp`]; x End[temp`] Because all of the symbols are looked up in the symbol table before the context-changing command is executed. Anyway, this reminds me of an old joke: A guy goes to the doctor, he says, "Doc, it hurts when I do this." So the doctor says, "Then don't do that!" Dave Wagner Principia Consulting (303) 786-8371 dbwagner at princon.com http://www.princon.com/princon