P12: P11で作った圧縮データの展開

;;;
;; P12 (**) Decode a run-length encoded list.
;;  Given a run-length code list generated as specified in 
;;   problem P11. Construct its uncompressed version.
(defun decode (lis)
  (let ((acc nil))
    (dolist (elem lis)
      (cond
       ((atom elem) (push elem acc))
       (t
	(let ((content (second elem)))
	  (dotimes (i (first elem))
	    (push content acc))))))
    (reverse acc)))

(decode '((4 A) B (2 C) (2 A) D (4 E)))
;; => (A A A A B C C A A D E E E E)
(decode '((5 NIL) (5 T)))
;; => (NIL NIL NIL NIL NIL T T T T T)
(decode '(NIL (5 T) NIL))
;; => (NIL T T T T T NIL)
(decode nil)
;; => NIL