L99 オレオレ解答 P11 から P15

どもです。
P11からP15です。P13 がもひとつよくわからなかったです。

;;;; P11
(defun encode-modified (lst)
  (mapcar (lambda (l)
            (if (<= (length l) 1)
                (car l)
                (list (length l) (car l))))
          (pack lst)))

(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))
(encode-modified '(a a b b)) => ((2 A) (2 B))
(encode-modified '(a b)) => (A B)
(encode-modified '(a)) => (A)
(encode-modified '()) => (NIL)

;;;; P12
(defun decode (lst)
  (labels ((f (n elt)
             (if (zerop n) nil
                 (cons elt (f (1- n) elt)))))
    (mapcar (lambda (e)
              (if (atom e) e
                  (f (car e) (cadr e))))
            lst)))

(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 '((2 A) (2 B))) => ((A A) (B B))
(decode '(A B)) => (A B)
(decode '(a)) => (A)
(decode '()) => NIL

;;;; P13
(defun encode-direct (lst)
  (labels ((count-elem (e l n)
             (if (or (null l) (not (eq e (car l))))
                 n
                 (count-elem e (cdr l) (1+ n))))
           (encode-direct-aux (l)
             (if (null l) nil
                 (let ((n (count-elem (car l) l 0)))
                   (if (= n 1)
                       (cons (car l) (encode-direct-aux (cdr l)))
                       (cons (list n (car l)) (encode-direct-aux (nthcdr n l))))))))
    (encode-direct-aux lst)))

(encode-direct '(a a a a b c c a a d e e e e)) => ((4 A) B (2 C) (2 A) D (4 E))
(encode-direct '(a b)) => (A B)
(encode-direct '(a a b)) => ((2 A) B)
(encode-direct '(a b b)) => (A (2 B))
(encode-direct '(a a b b)) => ((2 A) (2 B))
(encode-direct '(a)) => (A)
(encode-direct '()) => NIL

;;;; P14
(defun dupli (lst)
  (mapcan (lambda (e) (list e e)) lst))

(dupli '(a b c c d)) => (A A B B C C C C D D)
(dupli '(a)) => (A A)
(dupli '()) => NIL
(dupli '((a) (b))) => ((A) (A) (B) (B))

;;;; P15
(defun repli (lst n)
  (mapcan (lambda (e) (loop for i below n collect e)) lst))

(repli '(a b c) 3) => (A A A B B B C C C)
(repli '(a) 0) => NIL
(repli '(a) 1) => (A)