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)