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

Re: Making a lambda-expr more like a fn



> While reading the messages about turning lambda expressions
> into functions, it seemed to me that the following might be reasonable...
> 
> (defmacro with-environment ((var) &body body &environment env)
>     `(let ((,var ',env))
>        ,@body))
> 
> In an artificial example..
> 
> (let ((x 0))
>         (with-environment (env)
>                 (setf counter-fn
>                                                                                 
(enclose '(lambda () (incf x)) env))))
> 
> However...
> 
> ? (let ((x 'non-nil-environment))
>     (declare (ignore x))
>     (with-environment (var) var))
> #<BOGUS object @ #x5DF871>
> ?
> 
> Does this work in any Lisp?
> Should it?

Macro environments are specified to have dynamic extent.  See CLtL2, p.203, in 
the paragraph beginning "X3J13 voted in March 1989 <117> ...".