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

Re: (define <generated> ...)

>     (define-syntax defoo
>       (syntax-rules ()
> 	((defoo name)
> 	 (begin (define foo 30)
> 		(define name (+ foo 4))))))

>     (defoo x)

>     foo  =>  20 or 30 ?

> Of course, X will be 34 in either case.  But what I want to know is
> whether the identifier that gets defined by the macro's (define foo
> ...) is the generated identifier (alias) or FOO.

Bob and I discussed this at one point, but never decided what to do.
He observed that one gets a kind of module system if the binding is
hidden, i.e., to a generated variable.

> Oh, I forgot, DEFINE's for top-level variables might or might not
> introduce bindings, so maybe this is implementation-dependent?

Possibly.  If (define foo ...) were replaced with (set! foo ...), foo
should definitely be 30.  So it's probably most logical for
implementations that treat top-level defines as assignments not to
create a "hidden" variable.  I'm not sure about implementations in
which top-level defines create new bindings.

It's interesting to note that if the above sequence appears within a
lambda, foo has the value 20.  So if we want top-level definitions to
behave more like internal definitions...