Subject: Re: More Scope... From: Erik Naggum <erik@naggum.no> Date: 2000/02/22 Newsgroups: comp.lang.lisp Message-ID: <3160252167384001@naggum.no> * Robert Munyer <munyer@mcs.com> | P.S. A couple of years ago I had an exasperating flame war with Erik | over a question very similar to this one. I eventually won the war, by | finding an excerpt from the HyperSpec that demonstrated the exact | opposite of Erik's main technical argument. August 1996. I think comp.lang.lisp readers deserve the opportunity to read the discussion for themselves, not the least to understand why Robert's self-serving summary is _still_ his position, and why it is still important that he be shot down, because he's _still_ wrong, nearly four years later. the following "power search" line lists them from www.deja.com: ~g comp.lang.lisp ~dc {1996/08/01 1996/09/30} ~s {EVAL implementations} the original question was why (let ((x 10)) (eval 'x)) produces different results before and after a special declaration of x. this stumps newbies at times, but it can be explained easily and well unless you get it wrong. so the problem with that debate was that Robert insisted on bringing up a *huge* number of *tiny* arguments. Robert _did_ field a war over quibbly little details, while everybody else were either trying to unconfuse him, calm him down, or putting in their earplugs. naturally, winning this war meant nobody made the effort to respond to more of the same old rants. my _main_ argument was that Common Lisp doesn't have a concept of "global variables", but lexical and dynamic _bindings_, and lexical and global symbol _references_ (explained in various bits and pieces -- the whole discussion helped clarify the issues for me). Robert's main point was that you could have a lexical and a dynamic variable with the same name. he's right (and I _never_ disagreed with him on it, because it is wholly irrelevant): the latter is called the symbol-value of a symbol that has _not_ been declared special, because a reference to a variable that is not lexical is identical to symbol-value of the symbol naming it. as most confused people who are right, Robert was right for wrong reasons: he didn't understand the distinction between binding and references to variables. apparently, he learned nothing from the whole exercise. here's an excerpt I think highlights exactly why Robert is _still_ upset: > (part of) Robert's answer was wrong, relied on implementation specifics > at best, and is no better off after his attempted rescue missions. end > of story. Wait a minute. STOP DOING THAT! It is rude and offensive. You keep saying that part of my answer was wrong somehow, without specifying how. Every time I challenge you to be specific you just post another article saying (or implying) that I made some vague, unspecified error. That is not a reasonable way to debate. In Usenet you are not supposed to simply state that someone is wrong; you are supposed to explain WHY he or she is wrong so that everyone can benefit. I clearly fell short of his expectations. of course that's _my_ fault. incidentally, Robert's parting words to us were as follows: The standard example code above makes it absolutely clear that SETQ does not, and must not, proclaim a symbol to be special. no wonder it didn't really feel good to part on this winning note: it's not a winning note. it's an admission of not remembering from early warnings in the same discussion that examples are not even considered part of the standard, for the very simple reason that the requirements have to be _uniquely_ authoritative. so the "excerpt from the HyperSpec that demonstrates the exact opposite of Erik's main technical point" is simply a lie -- but it's the kind you win wars with, because people normally let you think you won when you say something sufficiently stupid and gloat and brag about it to boot. #:Erik