The description of eqv? in section 11.5 says:
"Moreover, if (eqv? obj1 obj2) returns #t, then obj1 and obj2 behave the
same when passed as arguments to any procedure that can be written as a
finite composition of Scheme’s standard procedures."
This is a significant change from the R5RS. I know of at least two R5RS
implementations in which the following need not evaluate to #t:
(let* ((x 1.0)
(foo (lambda (y) (eq? x y)))
(obj1 x)
(obj2 x))
(eqv? (foo obj1) (foo obj2)))
Thus, obj1 and obj2 need not "behave the same" when passed to foo even
though (eqv? obj1 obj2) must return #t. (This can happen, for example,
if the implementation uses boxed inexacts and has a copying collector
that does not preserve eq?-ness for inexacts.)
More generally, I think this requirement implies that if (eqv? x y)
returns #t than (eq? x y) must also return #t. In that case, I'm not
sure if there is any difference between eq? and eqv?
Are the editors sure that this is what they want in the R6RS?
Regards,
Alan
_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss