fork download
  1. ; common-characters
  2.  
  3. (define (fold-left op base xs)
  4. (if (null? xs)
  5. base
  6. (fold-left op (op base (car xs)) (cdr xs))))
  7.  
  8. (define (common x-str y-str)
  9. (let loop ((xs (sort (string->list x-str) char<?))
  10. (ys (sort (string->list y-str) char<?))
  11. (zs (list)))
  12. (cond ((or (null? xs) (null? ys))
  13. (list->string (reverse zs)))
  14. ((char<? (car xs) (car ys))
  15. (loop (cdr xs) ys zs))
  16. ((char<? (car ys) (car xs))
  17. (loop xs (cdr ys) zs))
  18. (else (loop (cdr xs) (cdr ys)
  19. (cons (car xs) zs))))))
  20.  
  21. (define (common-chars . words)
  22. (fold-left common (car words) (cdr words)))
  23.  
  24. (display (common-chars "bella" "label" "roller")) (newline)
Success #stdin #stdout 0.01s 50288KB
stdin
Standard input is empty
stdout
ell