From 6010779fb260966bb48dddb8ae399f9c64e262b3 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Thu, 10 Nov 2011 05:34:20 +0900 Subject: [PATCH] adding missing files --- lib/scheme/char.scm | 17 ++++++++++++++++ lib/scheme/division.scm | 43 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 lib/scheme/char.scm create mode 100644 lib/scheme/division.scm diff --git a/lib/scheme/char.scm b/lib/scheme/char.scm new file mode 100644 index 00000000..d3a45a87 --- /dev/null +++ b/lib/scheme/char.scm @@ -0,0 +1,17 @@ + +;; Simple ASCII definitions, need to make Unicode aware. + +(define char-foldcase char-downcase) + +(define (numeric-digit ch) + (let ((n (- (char->integer ch) (char->integer #\0)))) + (and (<= 0 n 9) n))) + +(define (string-upcase str) + (string-map char-upcase str)) + +(define (string-downcase str) + (string-map char-downcase str)) + +(define (string-foldcase str) + (string-map char-foldcase str)) diff --git a/lib/scheme/division.scm b/lib/scheme/division.scm new file mode 100644 index 00000000..08042817 --- /dev/null +++ b/lib/scheme/division.scm @@ -0,0 +1,43 @@ + +(define truncate-quotient quotient) +(define truncate-remainder remainder) +(define (truncate/ n m) + (values (truncate-quotient n m) (truncate-remainder n m))) + +(define floor-remainder modulo) +(define (floor-quotient n m) + (quotient (- n (floor-remainder n m)) m)) +(define (floor/ n m) + (values (floor-quotient n m) (floor-remainder n m))) + +(define (round-quotient n m) + (inexact->exact (round (/ n m)))) +(define (round-remainder n m) + (- n (* m (round-quotient n m)))) +(define (round/ n m) + (values (round-quotient n m) (round-remainder n m))) + +(define (ceiling-quotient n m) + (inexact->exact (ceiling (/ n m)))) +(define (ceiling-remainder n m) + (- n (* m (ceiling-quotient n m)))) +(define (ceiling/ n m) + (values (ceiling-quotient n m) (ceiling-remainder n m))) + +(define (euclidean/ n m) + (if (> n 0) (ceiling/ n m) (floor/ n m))) +(define (euclidean-quotient n m) + (if (> n 0) (ceiling-quotient n m) (floor-quotient n m))) +(define (euclidean-remainder n m) + (if (> n 0) (ceiling-remainder n m) (floor-remainder n m))) + +(define (centered-remainder n m) + (let ((r (euclidean-remainder n m)) + (m/2 (abs (/ m 2)))) + (cond ((< r (- m/2)) (+ r (abs m))) + ((>= r m/2) (- r (abs m))) + (else r)))) +(define (centered-quotient n m) + (quotient (- n (centered-remainder n m)) m)) +(define (centered/ n m) + (values (centered-quotient n m) (centered-remainder n m)))