Clojure で拡張子によりファイルをリストアップする

Clojure で、ディレクトリ内のファイルをリストアップして、結果のシーケンスから拡張子によるフィルタリングを行い、任意の拡張子から成るファイルのシーケンスを作り出す。

(import '(java.io File))
(use '[clojure.contrib.str-utils :only (str-join)])

;; 拡張子文字列を受け取り、正規表現パターンを返す
(defn make-regexp [ext]
  (java.util.regex.Pattern/compile
    (str ".*\." ext "$")))

;; 拡張子文字列を受け取り、ディレクトリ内のファイルのシーケンスを返す
(defn list-files-by-ext [ext]
  (filter #(re-seq (make-regexp ext) %)
          (map #(.getName %) (.listFiles (File. ".")))))

実行結果

user=> (list-files-by-ext "clj")
("index-of-any.clj" "type-hint.clj" "flow-controls.clj" "isoverten.clj" "exception.clj" "sample.clj" "create-java-class-with-clojure.clj" "var-bindings.clj" "list-files-by-ext.clj")
プログラミングClojure
プログラミングClojure

posted with amazlet at 10.05.19
Stuart Halloway
オーム社
売り上げランキング: 8244
«
»