[Openmcl-devel] How abour top-level setf = REPL-lexical variables? (was Re: Compiler warnings)

Ron Garret ron at flownet.com
Tue Oct 20 06:02:50 UTC 2009


On Oct 19, 2009, at 7:00 PM, Kevin Reid wrote:

> On Oct 19, 2009, at 21:34, Ron Garret wrote:
>
> [in a long thread about the behavior of top-level setf]
>
>> Yes.  I'm doing some testing, so I want some place to stash an
>> intermediate result.  I do:
>>
>> (setf x ...)
>>
>> Later, after I'm long done with that and the fact that I once created
>> a global variable named X, I do this:
>>
>> (defun make-closure (x) (lambda () ... x ...))
>>
>> I then expect MAKE-CLOSURE to return a lexical closure.
>
> IMO, the best way to make this DWIM (which as far as I know is
> conformant (in that the REPL is mostly unspecified) but not currently
> done by any CL implementation) is to make x a *lexical* variable which
> is managed by the REPL. Your example would then do exactly what you
> meant.

I think some people would still be surprised by the following:

(setf x 1)
(eval 'x) -> ERROR

Also, what should the following do:

(set 'x 1)
(setf x 2)
x -> ???

> I think this facility would have the following benefits:
>
>   - Saves typing when playing around at the REPL, since there's no  
> need
>     for *special* markers.
>
>
>   - Reminds you what you created as an interactive temporary vs. what
> is
>     global state of the application, both syntactically and because  
> you
>     can get a list of them.
>
>
>   - Fits what a lot of beginners expect, because they're
>       - coming from Perl/Python/PHP/whatever
>       - using ancient tutorials/samples with top-level setq/setf
>
>     (This isn't just a beginner thing -- *I* would greatly like to  
> have
>     this feature to save me inventing special-variable names while
>     repl-ing.)
>
>
> And it's AFAIK fully conformant with CLHS.

You might want to take a look at:

http://rondam.blogspot.com/2009/08/global-variables-done-right.html

rg




More information about the Openmcl-devel mailing list