string->list now takes optional start/end params

This commit is contained in:
Alex Shinn 2012-10-14 22:47:45 +09:00
parent bc4d01eac0
commit 4d10734110

View file

@ -396,11 +396,15 @@
(call-with-output-string (call-with-output-string
(lambda (out) (for-each (lambda (ch) (write-char ch out)) ls)))) (lambda (out) (for-each (lambda (ch) (write-char ch out)) ls))))
(define (string->list str) (define (string->list str . o)
(let lp ((i (string-cursor-prev str (string-cursor-end str))) (res '())) (cond
(if (< i 0) ((null? o)
res (let lp ((i (string-cursor-prev str (string-cursor-end str))) (res '()))
(lp (string-cursor-prev str i) (cons (string-cursor-ref str i) res))))) (if (< i 0)
res
(lp (string-cursor-prev str i) (cons (string-cursor-ref str i) res)))))
(else
(string->list (apply substring str o)))))
(define (string-fill! str ch) (define (string-fill! str ch)
(let lp ((i (- (string-length str) 1))) (let lp ((i (- (string-length str) 1)))
@ -1098,6 +1102,7 @@
(define (string-copy s) (substring-cursor s 0 (string-size s))) (define (string-copy s) (substring-cursor s 0 (string-size s)))
(define string-cursor-end string-size)) (define string-cursor-end string-size))
(else (else
(define (string-index->offset str i) i)
(define string-size string-length) (define string-size string-length)
(define substring-cursor substring) (define substring-cursor substring)
(define (string-copy s) (substring s 0 (string-length s))) (define (string-copy s) (substring s 0 (string-length s)))