fork download
  1. ;; (import (chicken string))
  2. ;; (import (chicken format))
  3. (define (chunk eq? xs)
  4. (define (aux acc xs)
  5. (cond
  6. ((null? xs) (reverse acc))
  7. ((or (null? acc) (not (eq? (caar acc) (car xs)))) (aux (cons (list (car xs)) acc) (cdr xs)))
  8. (else (aux (cons (cons (car xs) (car acc)) (cdr acc)) (cdr xs)))))
  9. (aux '() xs))
  10. (define f
  11. (compose
  12. (cut apply string-append <>)
  13. (cut flatten <>)
  14. (cut map (lambda (ss) (if (equal? (car ss) " ") " " ss)) <>)
  15. (cut chunk equal? <>)
  16. (cut string-chop <> 1)))
  17. (define (g s)
  18. (format #t "\"~A\" -> \"~A\"~%" s (f s)))
  19. (g "a b c")
  20. (g " a ")
  21. (g " a")
  22. (g "a ")
  23. (g " ")
  24. (g "")
  25.  
Success #stdin #stdout 0.01s 7836KB
stdin
Standard input is empty
stdout
"a b     c" -> "a    b    c"
" a " -> "    a    "
"  a" -> "    a"
"a  " -> "a    "
" " -> "    "
"" -> ""