string->number fails for "1e2"

Emilio Lopes <[email protected]> Wed, 01 Nov 2006 19:05:33 +0100
Newsgroups gmane.lisp.scheme.scsh
Organization The Church of Emacs
Message-ID <[email protected]>
As stated in the subject line:

   Welcome to scsh 0.6.7 (R6RS)
   Type ,? for help.
   > (string->number "1e2")
   #f

This particular example comes from R5RSĀ [1].

But:

   > (string->number "1.e2")
   100.

The patch bellow, taken verbatim from Scheme48, seems to fix this
problem.

Footnotes: 
[1]  http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html#%_idx_352

diff -c "/home/ecl/scsh/scsh-0.6.7/scheme/rts/numio.scm.~1~" "/home/ecl/scsh/scsh-0.6.7/scheme/rts/numio.scm"
*** /home/ecl/scsh/scsh-0.6.7/scheme/rts/numio.scm.~1~	Tue Sep 14 13:44:58 1999
--- /home/ecl/scsh/scsh-0.6.7/scheme/rts/numio.scm	Tue Oct 17 16:16:06 2006
***************
*** 121,126 ****
--- 121,134 ----
  			     #f)	;inexact
  			    ((char=? (string-ref string pos) #\#)
  			     #f)
+ 			    ((and (= radix 10)
+ 				  (case (char-downcase (string-ref string pos))
+ 				    ;; One day, we have to include #\s #\f #\d #\l.
+ 				    ;; We don't now because STRING->FLOAT actually does the
+ 				    ;; wrong thing for these currently, so we'd rather barf.
+ 				    ((#\e) #t)
+ 				    (else #f)))
+ 			     #f)
  			    (else (loop (+ pos 1))))))))))))
  
  (define-generic really-string->number &really-string->number)

Diff finished.  Tue Oct 17 17:22:12 2006