fork download
  1. ;; (import (chicken string))
  2. ;; (import (chicken format))
  3. (define (tally eq? xs)
  4. (define (aux acc xs)
  5. (if (null? xs)
  6. acc
  7. (let* ((k (car xs))
  8. (v (alist-ref k acc eq?))
  9. (a (alist-update k (+ 1 (or v 0)) acc eq?)))
  10. (aux a (cdr xs)))))
  11. (aux '() xs))
  12. (define (filter f xs)
  13. (reverse (foldl (lambda (acc x) (if (f x) (cons x acc) acc)) '() xs)))
  14. (define f
  15. (compose
  16. (cut apply string-append <>)
  17. (cut map car <>)
  18. (cut filter (lambda (kv) (< 1 (cdr kv))) <>)
  19. (cut tally equal? <>)
  20. (cut string-chop <> 1)))
  21. (define (g s)
  22. (format #t "~A -> ~A~%" s (f s)))
  23. (g "T")
  24. (g "CG")
  25. (g "ATA")
  26. (g "CGGA")
  27. (g "ATGAT")
  28. (g "GTTGCA")
  29. (g "CCCCGGG")
  30. (g "ACTGCGAG")
  31. (g "ATCAGAATA")
  32. (g "TGCCATGACA")
  33.  
Success #stdin #stdout 0.01s 7952KB
stdin
Standard input is empty
stdout
T -> 
CG -> 
ATA -> A
CGGA -> G
ATGAT -> AT
GTTGCA -> GT
CCCCGGG -> CG
ACTGCGAG -> ACG
ATCAGAATA -> AT
TGCCATGACA -> TGCA