[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
defun and lexical environments
Date: Wed, 2 Sep 87 16:08 EST
From: GODDEN%gmr.com@RELAY.CS.NET
Am I wrong or should the following be equivalent:
(defun foo (x)
(defun bar (y) (list x y))
x)
(defun foo (x)
(setf (symbol-function 'bar) #'(lambda (y) (list x y)))
x)
When I do the second form followed by (foo 1) (bar 2)
I get (1 2) returned from bar. But doing this after the
first defun gives an error, unbound variable x.
Is this a bug in the Symbolics implementation?
Or a bug in me?
The silver bible doesn't constrain DEFUN to only work at "top level"
although Symbolics does (as do most implementations).
Also note that
(defun foo (x)
(setf (symbol-function 'bar) '(lambda (y) (list x y)))
x)
will not do what you expect.
Incidentally, I am talking about the Common Lisp language
and defun is explained on p.67 of Steele (not 57 as the
index claims). As I read it, the two forms above should
be equivalent.
p.s. If any of you have any influence in the matter, please
try to get us a decent index in the next edition of Steele.
It is first mentioned on 57, but if you want you should get "Common
Lisp, the Index" from Coral Software.