Next: , Previous: , Up: Top   [Index]


14 Parsing flonums

The following bindings are exported by the library (vicare numerics flonum-parser).

Function: parse-flonum flonum real-func unreal-func

Parse the flonum its components for string formatting.

If flonum is representable as real number, apply the function real-func to 3 arguments: a boolean, true if flonum is positive; a list of characters representing the digits of flonum; a fixnum representing the exponent of flonum. Return the result of the application.

If flonum is not representable as real number, apply the function unreal-func to a single argument being the string representation of flonum. Return the result of the application.

Notice how the arguments handed to real-func match the argument of format-flonum from (vicare flonum-formatter).

#!r6rs
(import (vicare)
  (vicare numerics flonum-parser))

(parse-flonum 1.23456789
              (lambda args (cons 'real args))
              (lambda args (cons 'unreal args)))
⇒ (real #t
    (#\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9
     #\0 #\0 #\0 #\0 #\0 #\0 #\0 #\1)
    1)

(parse-flonum 12.34e5
              (lambda args (cons 'real args))
              (lambda args (cons 'unreal args)))
⇒ (real #t (#\1 #\2 #\3 #\4) 7)

(parse-flonum -12.34e5
              (lambda args (cons 'real args))
              (lambda args (cons 'unreal args)))
⇒ (real #f (#\1 #\2 #\3 #\4) 7)

(parse-flonum +inf.0
              (lambda args (cons 'real args))
              (lambda args (cons 'unreal args)))
⇒ (unreal "+inf.0")

(parse-flonum +nan.0
              (lambda args (cons 'real args))
              (lambda args (cons 'unreal args)))
⇒ (unreal "+nan.0")