Hi Gerald, I had the very brief pleasure of meeting you at the International Lisp Conference in 2009. I trust all is well. I co-maintain Guile these days.
On Mon 29 Apr 2013 19:18, "Arthur A. Gleckler" <[email protected]> writes: > (let ((p (lambda (x) x))) ==> unspecified > (eqv? p p)) > > is inconsistent with the intended meaning of eqv?. > > [... interesting points elided ...] > > By the way, which implementation does this? Why? This clause was present in R6RS. Its provenance is somewhat unclear. It was discussed last year, and Will Clinger justified it with this rationale: http://lists.r6rs.org/pipermail/r6rs-discuss/2012-May/006369.html However, I think that the particular example he gave was permissible with R5RS semantics. The advantage of this transformation is to allow better optimization. Inlining is copy-propagation on procedural values. If you treat all procedures as copyable, you might find a beta-reduction that you wouldn't see otherwise. But if you have to treat all procedures as closures with identity unless proven otherwise, you might miss out on optimization opportunities. Larceny probably uses this transformation in R6RS mode. I think Chez uses it too. I believe that Guile does it as well, though it is hard to provoke a case in which it is observable. It pains me to admit it but you might be right on this point. With this eqv? specification, closures are not at all a poor man's object -- at least, if you treat identity as one of the essential characteristics of objects. I would appreciate thoughts of others on scheme-reports, and links to other rationales as appropriate. Regards, Andy -- http://wingolog.org/ _______________________________________________ Scheme-reports mailing list [email protected] http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports
