Add abs.
[mes.git] / module / mes / scm.mes
index d39fee3507526cb4b2def92fa20621b2f9542800..a9898c8ad95300cb3190f58cbef025b2f777d374 100644 (file)
       (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 (1- x)
   (- x 1))
 
+(define (abs x)
+  (if (>= x 0) x (- x)))
+
 (define (expt x y)
   (let loop ((s 1) (count y))
     (if (= 0 count) s