Subject: Re: Idiot's guide to special variables take 2
From: Erik Naggum <erik@naggum.no>
Date: 19 Nov 2002 06:07:14 +0000
Newsgroups: comp.lang.lisp
Message-ID: <3246674834366592@naggum.no>

* Kurt B. Kaiser
| I would have expected eval to evaluate its argument in the lexical
| environment of the let block.

  But /why/?  When you quote x, you explicitly request that it /not/ be
  evaluated.  You pass `eval´ a symbol, not a value from the lexical
  environment.  If you want the latter effect, do not quote x.

| Other functions, like print, have their arguments evaluated in that
| lexical environment before being passed.

  If you try `(print 'x)´, it will print `x´, not the value thereof.

| However, the _effect_ of eval seems to be not quite like other functions
| because when it evaluates its argument it does so in the current dynamic
| environment, and that is definitely not what I was expecting.

  All other functions do the same.  This is how function evaluation works.
  This is how the dynamic environment works.

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

  I believe you still think in a different language and are unwilling to
  let go of what you believe you understand.  Like perhaps `eval´ in Perl.

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