#:g1: ClojureでL-99 (P10 ランレングス圧縮)

Posted 2008-09-27 05:25:00 GMT

Clojureでは、lambdaは、Arcのようにfn(ファンと作者は読んでいた)と書けるので楽で良いです。
また、リーダーマクロによる更なる略記法もあって、#()でArcの[]のようなことができます。
引数は、UNIXのシェルのように%1、%2、%3...と番号で参照できます。さらに良く使う%1は、%だけでも良し。

(defn
  #^{:doc "P10 (*) Run-length encoding of a list."
     :test (do (test= (encode '(a a a a b c c a a d e e e e))
                      '((4 a) (1 b) (2 c) (2 a) (1 d)(4 e)))
               (test= (encode []) [])) }
; ------
  encode
; ------
  ([coll]
     (if (empty? coll)
       []
       (map #(list (length %) (first %))
            (pack coll)))))

comments powered by Disqus