RosettaCodeData/Task/Run-length-encoding/Emacs-Lisp/run-length-encoding.l

19 lines
575 B
Common Lisp

(defun run-length-encode (str_arg)
"Return the run length encoding of a string argument STR_ARG."
(let ((dalist (string-to-list str_arg)) (letters) (frequency))
(dolist (element dalist)
(if (not (equal (car letters) element))
(progn
(setq letters (cons element letters))
(setq frequency (cons 1 frequency)))
(setq frequency (cons (+ (car frequency ) 1) (cdr frequency)))))
(apply 'concat
(reverse
(mapcar*
(lambda (x y) (concat (number-to-string x)
(char-to-string y)))
frequency letters)))))