; double space
(define (double-space oldstr)
(define (space? str idx)
(char=? (string-ref str idx) #\space))
(let ((oldlen (string-length oldstr)))
(do ((oldidx 0 (+ oldidx 1))
(count 0 (+ count (if (space? oldstr oldidx) 1 0))))
((= oldidx oldlen)
(let* ((newlen (+ oldlen count))
(newstr (make-string newlen #\space)))
(do ((oldidx 0 (+ oldidx 1))
(newidx 0 (+ newidx (if (space? newstr newidx) 2 1))))
((= oldidx oldlen) newstr)
(string-set! newstr newidx (string-ref oldstr oldidx))))))))
(display (double-space "hello")) (newline)
(display (double-space "hello hello")) (newline)
(display (double-space "hello hello")) (newline)
(display (double-space "hello hello")) (newline)
(display (double-space "hello hello hello")) (newline)
(display (double-space " hello ")) (newline)
(display (double-space "")) (newline)
(display (double-space " ")) (newline)
(display (double-space " ")) (newline)
(display (double-space " ")) (newline) (newline)
(define (double-space str)
(let loop ((xs (string->list str)) (zs (list)))
(if (null? xs) (list->string (reverse zs))
(if (char=? (car xs) #\space)
(loop (cdr xs) (cons #\space (cons #\space zs)))
(loop (cdr xs) (cons (car xs) zs))))))
(display (double-space "hello")) (newline)
(display (double-space "hello hello")) (newline)
(display (double-space "hello hello")) (newline)
(display (double-space "hello hello")) (newline)
(display (double-space "hello hello hello")) (newline)
(display (double-space " hello ")) (newline)
(display (double-space "")) (newline)
(display (double-space " ")) (newline)
(display (double-space " ")) (newline)
(display (double-space " ")) (newline)