[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
I Like a Single Namespace
- To: Christopher Dollin <kers%hplb.csnet@relay.cs.net>
- Subject: I Like a Single Namespace
- From: Barry Margolin <barmar@Think.COM>
- Date: Mon, 22 Jun 87 12:59 EDT
- Cc: common-lisp@sail.stanford.edu
- In-reply-to: <25156.8706221353@hplb.lb.hp.co.uk>
Date: Mon, 22 Jun 87 13:53:15 GMT
From: Christopher Dollin <kers%hplb.csnet@relay.cs.net>
Issues in Function and Value Cells
------ -- -------- --- ----- -----
[...]
Without this one has to restore to
unwind-protects or double declarations as in
(let ((old-special-variable special-variable))
(let ((special-variable expression-involving-old-special-variable))
bit-that-does-the-work
)
)
where the unholy conspiracy between the structure of let-bindings and the
behaviour of dynamic binding leaves a lot to be desired, especially if more
than one special variable is being so modified.
The above is not necessary in any Maclisp-descended Lisp I'm familiar
with.
(let ((*special-var* *special-var*))
bit-that-does-the-work)
works fine (and is used quite often) in Maclisp, Zetalisp, and Common
Lisp. The expressions in a LET value form are evaluated in the dynamic
environment OUTSIDE the LET. You may be confusing this with the fact
that declarations at the beginning of a LET body refer to variables in
the value forms; this means that you can't do
(let ((*special-var* *special-var*))
(declare (unspecial *special-var*))
bit-that-does-the-work)
and have the lexical *SPECIAL-VAR* get initialized from the dynamic
*SPECIAL-VAR*.
barmar