# Re: My ideas about infinity in Scheme (revised)

This page is part of the web mail archives of SRFI 70 from before July 7th, 2015. The new archives for SRFI 70 contain all messages, not just those from before July 7th, 2015.

```>  | From: "Chongkai Zhu" <mathematica@xxxxxxxxx>

>  | I have also considered infinities in Scheme and have some
>  | different ideas:
>  |
>  | 1. We need both exact (rational) infinity and inexact infinity,
>  | that is, four special numbers:
>  |
>  | 1/0 -1/0 +inf.0 -inf.0

> From: Aubrey Jaffer <agj@xxxxxxxxxxxx>

> How about "1/0." and "-1/0."?

>  | For the same reason, the syntax of "indeterminate" should be
>  | "0/0" (exact) and "nan.0" (inexact).  The names +inf.0, -inf.0
>  | and nan.0 were borrowed from PLT scheme.
>
> While the number syntax of R5RS can be readily extended to include
> +inf.0, -inf.0 (because of the leading sign). "nan.0" runs afoul of
> R5RS 2.1

Something I'd just like to throw out there is that one can represent
the inexact floating-point entities "NaN" and positive and negative
"infinity" without extending the r5rs BNF at all, by using #i0/0,
#i1/0, and #i-1/0.  (I implemented this for kawa back in 1998, but I
don't know whether kawa still uses that notation.)

I'm dubious about exact infinities (and I'm especially confused by the
idea of Exactly Not A Number, and whether that's the same as Not
Exactly A Number, or if Not Exactly A Number is what NaN has always
meant and therefore the two NaNs would be Inexactly Not Exactly A
Number and Exactly Not Exactly A Number), but I do acknowledge that
exact infinity would make the following behavior implementable and it
would make some sense:

(let ((never-ending-story (list "and then, ")))
(set-cdr! never-ending-story never-ending-story)
(length never-ending-story))
=> 1/0  [exactly]

-al

P.S.  In r5rs, there are many different notations for exact zero:

0
-00/42
#e+.0s7i
#x0@a

... et cetera.  If we add the quantity Exactly Not Exactly A Number,
does that mean I could start winning friends and influencing people by
using 0@0/0 too?

```