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

Reply via email to