#:g1: clojureでL-99 (P12 ランレングス圧縮の伸長)

Posted 2008-09-29 02:54:00 GMT

repeatという、アイテムの繰り返しの遅延リストを作れるので、こういうのは割と簡潔に書けます。

(defn
  #^{:doc "P12 (**) Decode a run-length encoded list."
     :test (do (test= (decode []) [])
               (test= (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
; ------
  ([coll]
     (if (empty? coll)
       []
       (mapcat #(if-let [n item] (and (list? %) %)
                  (take n (repeat item))
                  (list %))
               coll))))

comments powered by Disqus