Subject: Re: More Scope...
From: Erik Naggum <>
Date: 2000/02/22
Newsgroups: comp.lang.lisp
Message-ID: <>

* Robert Munyer <>
| 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

~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.