Yesterday, Peter Kourzanov wrote: > On Tue, 2010-12-21 at 15:30 -0500, John Cowan wrote: > > > eqv? is immaterial here: > > > > > > (let ([eqv? equal?]) (case "asd" (("asd") #t))) > > > > That does not mean what you think it means, for two reasons. One > > is that with a proper hygienic macro system, rebinding eqv? does > > not affect any uses of eqv? in the expansion of the case macro. > > The second reason is that implementations are free to make literal > > strings eqv? if they have the same content. > > Right. However, this still is an underspecified corner of Scheme. > Even in R6RS I don't see a mandate to always implement (case) via > hygienic macros (and have the system solve the rebinding).
Neither r5rs nor r5rs require `case' to be implemented as a macro in the first place -- so the specification that it should not be "confused" by a lexical scope with a different definition for `eqv?' is implicit in that the form is required to actually work. And if this is advocating such a specification, then why should there be one? There shouldn't be any difference between an implementation that implements it as a macro and one that does so as a core form, as long as it works. > And neither do implementors, in my experience. Is there really any implementation where (let ((eqv? #f)) (case 1 ((1) 1))) throws an error? (I don't know of any, but if there is one, it should be a case for a bug report rather than something to draw conclusions from.) -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! _______________________________________________ r6rs-discuss mailing list r6rs-discuss@lists.r6rs.org http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss