Skip to content

Instantly share code, notes, and snippets.

@eniehack
Created July 13, 2022 16:42
Show Gist options
  • Save eniehack/f20ce35a0a700c7b2596c2fd3b2294fd to your computer and use it in GitHub Desktop.
Save eniehack/f20ce35a0a700c7b2596c2fd3b2294fd to your computer and use it in GitHub Desktop.
(define (run-length s)
(letrec ((run-length-h (lambda (s vec count prev-char)
(if (null? s)
(vector-append vec (vector `(,prev-char ,count)))
(let ((c (car s)))
(if (char=? prev-char c)
(run-length-h (cdr s) vec (+ count 1) prev-char)
(if (char=? prev-char #\null)
(run-length-h (cdr s) vec 1 c)
(run-length-h (cdr s) (vector-append vec (vector `(,prev-char ,count))) 1 c))))))))
(run-length-h s '#() 0 #\null)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment