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

Re: BINDing unbounds



    There is actually a good (if not overwhelming) reason for leaving
    a variable uninitialized if its global value is never accessed.
    It helps catch places where a function is called by someone who
    failed to bind a dynamic variable that was needed.  I had more
    or less unconsciously made sure that every variable that didn't
    have a meaningful global value didn't have any global value, and
    this has come back to haunt me.
    
I think this is an argument for something that I was discussing with
Jonathan the other day:  namely, the splitting up of the functionality
of LSET.  LSET now does 2 things: (1) introduces a variable into a
locale and (2) sets the initial value of that variable.  It has always
disturbed me that you can use both SET and LSET to set the value of
a global variable.  It seems like what you really want is a primitive
LCREATE that takes only a variable name as its argument.  It simply
introduces the variable into the locale, but gives it no value.  Then
LSET becomes a macro:

    (DEFINE (LSET VAR OBJ)
        `(BLOCK (LCREATE ,VAR)
                (SET ,VAR ,OBJ)))

                        -- Nat