|
SketchyLISP Reference |
Copyright (C) 2007 Nils M Holm |
| <<[null?] | [Index] | [odd?]>> |
Conformance: R5RS Scheme (Restrictions: Accepts only strings representing integers. )
Purpose: Convert a number to a string. The radix must be in the range 2..16. If no radix is given, 10 is assumed.
Arguments:
N - integer
RADIX - optional radix
Implementation:
(define (number->string n . radix)
(letrec
((digits
(list->vector (string->list "0123456789abcdef")))
(conv
(lambda (n rdx res)
(cond ((zero? n) res)
(else (conv (quotient n rdx) rdx
(cons (vector-ref digits (remainder n rdx))
res))))))
(get-radix
(lambda ()
(cond ((null? radix) 10)
((< 1 (car radix) 17) (car radix))
(else (bottom '(bad radix in number->string)))))))
(let ((r (get-radix)))
(cond ((= r 10) (write-to-string (+ n 0)))
((zero? n) "0")
((negative? n)
(list->string
(cons #\- (conv (abs n) r '()))))
(else (list->string (conv n r '())))))))
Example:
(number->string -2748 16) => "-abc"
See also:
string->number.
| <<[null?] | [Index] | [odd?]>> |