Re: [Scheme-reports] Formal Comment: R7RS 'eqv?' cannot be used for reliable memoization John Cowan (24 Nov 2012 02:30 UTC)

Re: [Scheme-reports] Formal Comment: R7RS 'eqv?' cannot be used for reliable memoization John Cowan 24 Nov 2012 02:26 UTC

Ray Dillinger scripsit:

> First: is it the case that an implementation which does not provide
> NaN and -0.0 can be a correct implementation of R7RS?

Yes.  They are in fact described in the section "Implementation
extensions".

> If so, is there a standard way for portable code to discover whether the
> hosting implementation does or does not provide them without invoking
> an error?

There cannot be, in principle.  For one thing, R7RS (like R5RS)
does not require an implementation to support inexact numbers at all.
For another, in circumstances where implementation A would deliver -0.0,
implementation B might report a fatal implementation restriction.

But setting aside these relatively crude points, on a system which
distinguishes negative zero, (log -1.0-0.0i) will be 0.0-(pi)i rather
than 0.0+(pi)i, because the branch cut for log passes between 0.0 and
-0.0, so to speak.  This is a consequence of identifying 0.0 with "zero
or a positive number too small to represent" and -0.0 with "zero or a
negative number too large to represent".

> Assume someone is writing code in an implementation which does not
> provide NaN.  How would they produce code which handles NaN, -0.0,
> etc, specially but does not invoke a syntax error on their own nor any
> other implementation?

A syntax error isn't really the issue.  (/ (- (/ 1.0 0.0))) will generate
-0.0 if there is one, provided the system doesn't choke on the divisions.

> Uh, that's kind of a "wrong answer" on this level.  It is the goal
> of this process to produce something that's generally usable, right?

That doesn't mean there aren't edge cases.  This is one such edge case.

--
John Cowan  cowan@ccil.org   http://ccil.org/~cowan
"The exception proves the rule."  Dimbulbs think: "Your counterexample proves
my theory."  Latin students think "'Probat' means 'tests': the exception puts
the rule to the proof."  But legal historians know it means "Evidence for an
exception is evidence of the existence of a rule in cases not excepted from."

_______________________________________________
Scheme-reports mailing list
Scheme-reports@scheme-reports.org
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports