S-99-11 Modified run-length encoding.
Modify the result of problem S-99-10 in such a way that if an element has no duplicates it is simply copied into the result list. Only elements with duplicates are transferred as (N E) lists.
Example:
(encode-modified '(a a a a b c c a a d e e e e)) ; => ((4 a) b (2 c) (2 a) d (4 e))
Solution:
We'll reuse the helper function encode-f we defined for problem S-99-10 and simply pass it a modified encoder function:
(define encode-modified
(lambda (xs)
(let ((encoder (lambda (pkg)
(let ((N (length pkg))
(E (car pkg)))
(if (= N 1) E (list N E))))))
(encode-f xs encoder))))