Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

post you are run length encoding in lisp

Name: Anonymous 2014-10-05 3:18

critique mine pl0x:

(defun rle (str) ;run length encoding
(let ((i 0) c count out)
(while (< i (length str))
(if (eq c (elt str i))
(setq count (1+ count))
(when c
(setq out (append out (list (cons c count)))))
(setq c (elt str i))
(setq count 1))
(setq i (1+ i)))
(when c (setq out (append out (list (cons c count)))))
out))

Name: Anonymous 2014-10-05 15:36

% rle.pro
rle([], []).
rle([H|T], [[X, H]|R]) :- rle(T, [[Y, H]|R]), Y > 0, X is Y + 1.
rle([H|T], [[1, H]|R]) :- rle(T, R).

rld([], []).
rld([H|T], [[X,H]|R]) :- X > 1, Y is X - 1, rld(T, [[Y,H]| R]).
rld([H|T], [[1,H]|R]) :- rld(T, R).


| ?- [rle].
compiling rle.pro for byte code...
yes

| ?- L = [a, a, a, b, c, c], rle(L, E), rld(L, E).
E = [[3,a], [1, b], [2, c]]
L = [a, a, a, b, c, c] ?
yes

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List