[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Vectors as functions

Michael Sperber <sperber@informatik.uni-tuebingen.de> writes:

> Lexical binding means you can figure out for each occurrence of a
> name, its binding form.  Consider this (probably not exactly
> CL-correct, but you'll get my drift, I hope):
> (let ((foo 23))
>   (let ((name 'foo))
>     (let ((foo 42))
>       (set name -1)))
>   foo)
> At the place 'foo occurs, there's no way to tell what binding it's
> associated with.  In fact, it may be associated with several different
> bindings at run time, which is a hallmark property of dynamic binding.

In CL, this will not do what I'm guessing you think it will do. In CL
SET changes the symbol-value of a symbol, which is a global property.

Some quotes from the Hyperspec:

(set symbol value) ==  (setf (symbol-value symbol) value)

set cannot change the value of a lexical variable. 

Things like what you hint at can be achieved by judicious use of
(locally (declare (special foo)) ...) or other tricks but then you're
explicitly (ab)using dynamic binding.

Jane - Daria? Come on, the neighbors are starting to talk.
Daria - Um... good. Soon they'll progress to cave drawings and civilization 
will be on its way.