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

(define foo)



   Date: Fri, 13 Nov 92 15:54:06 EST
   From: Marc Feeley <feeley@IRO.UMontreal.CA>

   > 	(define foo)
   > to mean that foo is to become bound, but not assigned any particular
   > value; references to foo are errors until foo is assigned.

   This is fine with me.  However, I think that references to foo prior to
   the first assignment should not be an error.  I prefer to think of this
   form as binding foo to an undefined value.  Thus:

     (define foo)     is equivalent to (define foo (if #f 'dummy))
     (eq? foo foo)    should not be an error and should return #t

This would be fine with me, and an argument in favor of it is that if
(let ((foo)) ...) etc. are adopted (also fine with me), it is easier
to give faithful macroexpansions for all the affected "derived" forms
(macros).  That is, (let ((x y) ...) z ...) can still expand to
((lambda (x ...) z ...) y ...), where appropriate non-erroneous
side-effect-free expressions are supplied for the missing y's.  By
"faithful" I mean that in addition to meaning the same thing for
nonerroneous expressions, the expansion of the macro is also an error
in the situations specified by the prose description of the
unexpanded form as being errors.

But I don't much care either way.

Thanks to Marc and Jinx's disagreement, maybe I am beginning to
remember why this didn't get adopted before.

Jonathan