Re: Compound Expressions
- To: mathgroup at smc.vnet.net
- Subject: [mg29190] Re: [mg29178] Compound Expressions
- From: David Withoff <withoff at wolfram.com>
- Date: Sat, 2 Jun 2001 05:54:43 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
> I see that the following is what Mathematica does, so it's clearly what > Mathematica does: > > In[147]:= a = 3; Remove["Global`*"]; a = 3; a > > Out[147]= 3 > > In[148]:= a > > Out[148]= a > > In[149]:= a = 3; Remove["Global`*"]; Print[a]; a = 3; Print[a] > > From In[149]:= Removed["a"] > > From In[149]:= 3 > > In[150]:= a > > Out[150]= a > > What I don't understand is, not what Mathematica does here -- I'm not > interested in tracing out the details; I believe it happens --but *why* > the language would have to be designed to function in this (utterly > bizarre and utterly confusing) way? > > To be more specific about this gripe: > > * The "Remove" expression clearly removes "a" immediately when it is > encountered, as the output of In[149] in particular confirms. The symbol "a" has already been encountered before it is removed. It is perhaps also worth noting that the symbol "Remove" has been encounted, since the computer obviously has to encounter and recognize "Remove" before it can know that it is being asked to remove something. Similarly, "a" is not and cannot be removed immediately when it is encountered, since at least a few such encounters have to take place before the computer can know what it is being asked to do. > * The subsequent "a=3" expression then clearly recreates "a" and > assigns it a value *after* the "Remove" has been processed, as both > In[147] and In[149] confirm. The subsequent "a=3" does not recreate "a". The "a" was already created when it was encountered when the computer looked at the input to figure out what it was being asked to do. To put the logical issue another way, suppose I send you a message consisting of the single statement "Do not read this message", where it is obviously impossible for you to do what was requested in the message. The computer has to process the input far enough to recognize that it is being presented with a compound expression containing various symbols and operations before it can know what it is being asked to do. After completing that step the computer then proceeds to do what it was asked to do, which in this example is to remove a symbol and then assign a value to the removed symbol. > So how does it make sense to have the "Remove" come back to life and > operate *again*, long after it should have been forgotten, so to speak? Although the consequences of evaluating "Remove" certainly persist, I'm not sure I see an interpretation of this behavior in which it has come back to life. > Does it *have* to be designed this way? Yes. I could add, however, that even though it impossible for the computer to work otherwise, it is nevertheless an interesting problem, sort of like time travel and perpetual motion. Considering possible alternative designs, and understanding why they don't work, can be interesting and instructive. Dave Withoff Wolfram Research