It seems that the fundamental concern is that as a reference to a named definition may be rewritten as its semantic equivalent, and thereby may not reference the same code body after the rewrite.
However as it's this very guarantee of eqv? which enabled the rewrite, any such rewrite's should correspondingly preserve eqv? if necessitated within the code itself. Thereby although arguably: (define (x a b) (* a b)) may enable an optimizing compiler to rewrite: (eqv? x x) :: (eqv? x *) It should also obligate the compiler to tract the eqv? of such rewrites as may be necessitated by explicit test for such, but not likely otherwise. Thereby: (eqv? x x) => #t should always be true, although potentially rewritten as (eqv? x *), while (eqv? x *) => #f {or #t if capable of determining their equivalence} And thereby all can have their cake and eat it too, It seems? _______________________________________________ r6rs-discuss mailing list r6rs-discuss@lists.r6rs.org http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss