Add string->number.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Dec 2016 18:01:00 +0000 (19:01 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 20 Dec 2016 18:01:00 +0000 (19:01 +0100)
* module/mes/scm.mes (string->number): New function.

module/mes/scm.mes

index d39fee3507526cb4b2def92fa20621b2f9542800..ad1198f322ab86bb689b2846a25ca79537670f87 100644 (file)
       (if (= i n) '()
           (cons (string-ref s i) (loop (+ i 1)))))))
 
       (if (= i n) '()
           (cons (string-ref s i) (loop (+ i 1)))))))
 
+(define (string->number s . radix)
+  (if (and (pair? radix) (not (= (car radix) 10))) '*STRING->NUMBER:RADIX-NOT-SUPPORTED
+      (let* ((lst (string->list s))
+             (sign (if (char=? (car lst) #\-) -1 1))
+             (lst (if (= sign -1) (cdr lst) lst)))
+        (let loop ((lst lst) (n 0))
+          (if (null? lst) (* sign n)
+              (loop (cdr lst) (+ (* n 10) (- (char->integer (car lst)) (char->integer #\0)))))))))
+
 (define (vector . rest) (list->vector rest))
 (define c:make-vector make-vector)
 (define (make-vector n . x)
 (define (vector . rest) (list->vector rest))
 (define c:make-vector make-vector)
 (define (make-vector n . x)