Subject: Re: Idiot's guide to special variables take 2
From: Erik Naggum <>
Date: 19 Nov 2002 08:34:10 +0000
Newsgroups: comp.lang.lisp
Message-ID: <>

* Kurt B. Kaiser
| The task of evaluating the arguments is passed to `eval´, and it proceeds
| to produce a different result than the "normal" evaluation referred to in
| the HyperSpec.

  But it does not.  That is the whole essence of this thing.

| That's the view from someone of limited CL experience.  However, I think
| I'm getting it now.

  I think what some people here fail to grasp is that `eval´ is the most
  ordinary function you can think of.  Suppose you replace `eval´ with
  `identity´, which returns the argument.

(let ((x 42))
  (identity x))
=> 42

(let ((x 42))
  (identity 'x))
=> x

  Now we know what `eval´ /receives/.  The question is, what should it do
  with it?  By the very nature of lexical bindings, they are only visible
  in their /lexical/ scope, hence their name.  This means that when the
  function, `identity´ /or/ `eval´, receives the argument, `x´, we are no
  longer in the /lexical/ scope of the binding for `x´, hence we cannot
  refer to this binding at all.

| > | On a slightly different, but closely related, subject, I find it
| > | confusing that the `special declaration also "punches holes" in those
| > | parts of the lexical overlay which were created after the last
| > | dynamic binding, as in the example.
| > 
| >   I have no idea what this means. 
| The terminology "punches holes" is from your intuitive example.

  It is precisely /because/ of that that it makes no sense.  I know what I
  meant with the analogy.  What I am left with now is that it was not fully
  understood or was interpreted beyond the intended effect.

| I should say, "...including those marks on the lexical overlay which were
| created after the last dynamic binding..."

   A `special´ declaration with lexical scope is different from a `special´
   proclamation, which is a declaration with global scope.

| I think my biggest problem is getting away from concepts picked up from
| the old dynamic Lisps.

  If Emacs Lisp was your first encounter with `eval´, as another poster
  suggested, realizing the effect of lexical binding could take time.

| I don't think I'm having too much trouble letting go.  CL is CL.  I only
| explained in detail how I was stuck because you asked.

  Hm.  I try to keep in mind some form of predictive intuition about what
  people I try to explain something to must have understood and where their
  points if confusion remains, but I must admit to have lost track of you.

Erik Naggum, Oslo, Norway

Act from reason, and failure makes you rethink and study harder.
Act from faith, and failure makes you blame someone and push harder.