diff --git a/CHANGELOG.md b/CHANGELOG.md index 11d51f6e..b624d87f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ TODO: more performance improvements TODO: SRFI 113 +Features: + +- Allow the reader to recognize `+inf.0`, `-inf.0`, `+nan.0`, and `-nan.0`. + Bug Fixes - Only throw a divide by zero error for integer division. Floating point divide by zero is allowed and evaluates to `nan`. diff --git a/scheme/read.sld b/scheme/read.sld index 51f3dbe6..3575b667 100644 --- a/scheme/read.sld +++ b/scheme/read.sld @@ -532,7 +532,14 @@ (define (parse-atom a) (if (token-numeric? a) (string->number (list->string a)) - (string->symbol (list->string a)))) + (let ((atom (string->symbol (list->string a)))) + (if (or (eq? atom '+inf.0) + (eq? atom '-inf.0)) + (expt 2 1000000) + (if (or (eq? atom '+nan.0) + (eq? atom '-nan.0)) + (/ 0.0 0.0) + atom))))) ;;;;; ;; Read next character from port, using buffered char if available