ikarus/src/ikarus.strings.ss

43 lines
1.3 KiB
Scheme
Raw Normal View History

2007-05-05 03:46:26 -04:00
(library (ikarus strings)
2007-05-05 03:49:51 -04:00
(export string-ref make-string)
2007-05-05 03:46:26 -04:00
(import
2007-05-05 03:49:51 -04:00
(except (ikarus) string-ref make-string)
(only (scheme) $string-ref $fx+ $fx= $fx<= $fx< $string-length
$make-string $string-set!))
2007-05-05 03:46:26 -04:00
(define (string-ref s i)
(unless (string? s)
(error 'string-ref "~s is not a string" s))
(unless (fixnum? i)
(error 'string-ref "~s is not a valid index" i))
(unless (and ($fx< i ($string-length s))
($fx<= 0 i))
(error 'string-ref "index ~s is out of range for ~s" i s))
2007-05-05 03:49:51 -04:00
($string-ref s i))
(define make-string
(let ()
(define fill!
(lambda (s i n c)
(cond
[($fx= i n) s]
[else
($string-set! s i c)
(fill! s ($fx+ i 1) n c)])))
(define make-string
(case-lambda
[(n)
(unless (and (fixnum? n) (fx>= n 0))
(error 'make-string "~s is not a valid length" n))
($make-string n)]
[(n c)
(unless (and (fixnum? n) (fx>= n 0))
(error 'make-string "~s is not a valid length" n))
(unless (char? c)
(error 'make-string "~s is not a character" c))
(fill! ($make-string n) 0 n c)]))
make-string))
)