Advertisement
Guest User

Untitled

a guest
Dec 7th, 2013
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (defrecord Tree [value children])
  2. (defrecord File [name size dir?])
  3.  
  4. (defn- parallel-map [f coll]
  5.   (if (> (count coll) 3)
  6.     (pmap f coll)
  7.     (map f coll)))
  8.  
  9. (defn build-file-tree [file]
  10.   (let [file (if (string? file) (java.io.File. file) file)
  11.         name (.getName file)
  12.         dir? (.isDirectory file)
  13.         children (.listFiles file)
  14.         sub-trees (parallel-map build-file-tree children)]
  15.     (Tree.
  16.       (File.
  17.         name
  18.         (if dir?
  19.           (reduce + (parallel-map #(:size (:value %)) sub-trees))
  20.           (.length file))
  21.         dir?)
  22.       sub-trees)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement