Subject: Re: let bindings
From: Erik Naggum <>
Date: 1999/09/14
Newsgroups: comp.lang.lisp
Message-ID: <>

* Mark Carroll <>
| I get the impression from the CLHS that 
| (let ((x 1)) (let ((x (+ x 1))) x)) will always happily return 2?

  what's your question?

  assuming that it has to do with the scope of the bindings, the scope of
  bindings in a LET can informally be said to be the body form, but none of
  the value forms.  the scope of bindings in a LET* can informally be said
  to include the following value forms and the body.  in an FLET, the scope
  is likewise the body, only, but in LABELS the scope is informally the
  entire LABELS form.  in MACROLET, the scope is the body of the whole
  form, but the bodies of the macros defined are expanded _in_ that body,
  so the scope appears to be the whole form.  whether this is simple or
  complex to deal with seems to depend on the mental model brought to the
  issues at hand.  for instance, I fail to see what could possibly be
  ambiguous about the specification which would lead anyone to have only
  "impressions" as to what it says in this particular case, but it could be
  that the lack of some particular wording or minute point renders a reader
  with a predetermined model unable to get a preconceived question resolved.
  I'd like to understand what the pre-existing model and issue are, since
  it seems to be a lot of small issues like this that keep people from
  seeing the "bloody obvious", and I'm sure it's possible to get rid of a
  lot of confusion with some very simple statement to dispell confusion.