A critic of Guido's blog on Python's lambda

Paul Rubin http
Fri May 12 22:41:12 CEST 2006


Alexander Schmolck <a.schmolck at gmail.com> writes:
> >     (defvar *x*) ;; makes it special
> >     (setf *x* 1)
> >     (print *x*) ;;-> 1
> >     (let ((*x* 2))
> >        (print *x*)) ;; -> 2
> >     (print *x*) ;; -> 1
> 
> You seem to think that conflating special variable binding and lexical
> variable binding is a feature and not a bug. What's your rationale?

I thought special variables meant dynamic binding, i.e.

   (defvar *x* 1)
   (defun f ()
       (print *x*)              ;; -> 2 
       (let ((*x* 3))
           (g)))
   (defun g ()
       (print *x*))             ;; - > 3 

That was normal behavior in most Lisps before Scheme popularlized
lexical binding.  IMO it was mostly an implementation convenience hack
since it was implemented with a very efficient shallow binding cell.
That Common Lisp adapted Scheme's lexical bindings was considered a
big sign of CL's couthness.  So I'm a little confused about what Ken
Tilton is getting at.



More information about the Python-list mailing list