; common-characters
(define (fold-left op base xs)
(if (null? xs)
base
(fold-left op (op base (car xs)) (cdr xs))))
(define (common x-str y-str)
(let loop ((xs (sort (string->list x-str) char<?))
(ys (sort (string->list y-str) char<?))
(zs (list)))
(cond ((or (null? xs) (null? ys))
(list->string (reverse zs)))
((char<? (car xs) (car ys))
(loop (cdr xs) ys zs))
((char<? (car ys) (car xs))
(loop xs (cdr ys) zs))
(else (loop (cdr xs) (cdr ys)
(cons (car xs) zs))))))
(define (common-chars . words)
(fold-left common (car words) (cdr words)))
(display (common-chars "bella" "label" "roller")) (newline)
OyBjb21tb24tY2hhcmFjdGVycwoKKGRlZmluZSAoZm9sZC1sZWZ0IG9wIGJhc2UgeHMpCiAgKGlmIChudWxsPyB4cykKICAgICAgYmFzZQogICAgICAoZm9sZC1sZWZ0IG9wIChvcCBiYXNlIChjYXIgeHMpKSAoY2RyIHhzKSkpKQoKKGRlZmluZSAoY29tbW9uIHgtc3RyIHktc3RyKQogIChsZXQgbG9vcCAoKHhzIChzb3J0IChzdHJpbmctPmxpc3QgeC1zdHIpIGNoYXI8PykpCiAgICAgICAgICAgICAoeXMgKHNvcnQgKHN0cmluZy0+bGlzdCB5LXN0cikgY2hhcjw/KSkKICAgICAgICAgICAgICh6cyAobGlzdCkpKQogICAgKGNvbmQgKChvciAobnVsbD8geHMpIChudWxsPyB5cykpCiAgICAgICAgICAgIChsaXN0LT5zdHJpbmcgKHJldmVyc2UgenMpKSkKICAgICAgICAgICgoY2hhcjw/IChjYXIgeHMpIChjYXIgeXMpKQogICAgICAgICAgICAobG9vcCAoY2RyIHhzKSB5cyB6cykpCiAgICAgICAgICAoKGNoYXI8PyAoY2FyIHlzKSAoY2FyIHhzKSkKICAgICAgICAgICAgKGxvb3AgeHMgKGNkciB5cykgenMpKQogICAgICAgICAgKGVsc2UgKGxvb3AgKGNkciB4cykgKGNkciB5cykKICAgICAgICAgICAgICAgICAgICAgIChjb25zIChjYXIgeHMpIHpzKSkpKSkpCgooZGVmaW5lIChjb21tb24tY2hhcnMgLiB3b3JkcykKICAoZm9sZC1sZWZ0IGNvbW1vbiAoY2FyIHdvcmRzKSAoY2RyIHdvcmRzKSkpCgooZGlzcGxheSAoY29tbW9uLWNoYXJzICJiZWxsYSIgImxhYmVsIiAicm9sbGVyIikpIChuZXdsaW5lKQ==