;; (import (chicken string))
;; (import (chicken format))
(define (drop-while pred clist)
(if (or (null? clist) (not (pred (car clist))))
clist
(drop-while pred (cdr clist))))
(define cons*
(case-lambda
(() (cons))
((a) (cons a))
((a b) (cons a b))
((a b c) (cons a (cons b c)))
((a b c d) (cons a (cons b (cons c d))))
((a b c d e) (cons a (cons b (cons c (cons d e)))))
(xs (let ((xs (reverse xs))) (foldl (flip cons) (car xs) (cdr xs))))))
(define (f s)
(define (aux acc cs)
(if (null? cs)
acc
(let ((c (car cs)) (cs (cdr cs)))
(if (eq? c #\ )
(aux (cons* c c c c acc) (drop-while (cut eq? c <>) cs))
(aux (cons c acc) cs)))))
(reverse-list->string (aux '() (string->list s))))
(define (g s)
(format #t "\"~A\" -> \"~A\"~%" s (f s)))
(g "a b c")
(g " a ")
(g " a")
(g "a ")
(g " ")
(g "")
OzsgKGltcG9ydCAoY2hpY2tlbiBzdHJpbmcpKQo7OyAoaW1wb3J0IChjaGlja2VuIGZvcm1hdCkpCihkZWZpbmUgKGRyb3Atd2hpbGUgcHJlZCBjbGlzdCkKICAoaWYgKG9yIChudWxsPyBjbGlzdCkgKG5vdCAocHJlZCAoY2FyIGNsaXN0KSkpKQogICAgICBjbGlzdAogICAgICAoZHJvcC13aGlsZSBwcmVkIChjZHIgY2xpc3QpKSkpCihkZWZpbmUgY29ucyoKICAoY2FzZS1sYW1iZGEKICAgKCgpIChjb25zKSkKICAgKChhKSAoY29ucyBhKSkKICAgKChhIGIpIChjb25zIGEgYikpCiAgICgoYSBiIGMpIChjb25zIGEgKGNvbnMgYiBjKSkpCiAgICgoYSBiIGMgZCkgKGNvbnMgYSAoY29ucyBiIChjb25zIGMgZCkpKSkKICAgKChhIGIgYyBkIGUpIChjb25zIGEgKGNvbnMgYiAoY29ucyBjIChjb25zIGQgZSkpKSkpCiAgICh4cyAobGV0ICgoeHMgKHJldmVyc2UgeHMpKSkgKGZvbGRsIChmbGlwIGNvbnMpIChjYXIgeHMpIChjZHIgeHMpKSkpKSkKKGRlZmluZSAoZiBzKQogIChkZWZpbmUgKGF1eCBhY2MgY3MpCiAgICAoaWYgKG51bGw/IGNzKQogICAgICAgIGFjYwogICAgICAgIChsZXQgKChjIChjYXIgY3MpKSAoY3MgKGNkciBjcykpKQogICAgICAgICAgKGlmIChlcT8gYyAjXCApCiAgICAgICAgICAgICAgKGF1eCAoY29ucyogYyBjIGMgYyBhY2MpIChkcm9wLXdoaWxlIChjdXQgZXE/IGMgPD4pIGNzKSkKICAgICAgICAgICAgICAoYXV4IChjb25zIGMgYWNjKSBjcykpKSkpCiAgKHJldmVyc2UtbGlzdC0+c3RyaW5nIChhdXggJygpIChzdHJpbmctPmxpc3QgcykpKSkKKGRlZmluZSAoZyBzKQogIChmb3JtYXQgI3QgIlwifkFcIiAtPiBcIn5BXCJ+JSIgcyAoZiBzKSkpCihnICJhIGIgICAgIGMiKQooZyAiIGEgIikKKGcgIiAgYSIpCihnICJhICAiKQooZyAiICIpCihnICIiKQo=