构建目录树

Ham*_*aya 4 clojure

我正在尝试构建一个目录树,例如如何以向量的形式表示xml树,我可以使用以下代码段遍历文件系统,但我无法理解如何构建树结构这个的?


(defn trav [dir]
  (if (.isDirectory dir)
    (do
      (println (.getName dir))
      (doseq [file (.listFiles dir)]
        (if (.isDirectory file)
          (trav file)))      
      )))
Run Code Online (Sandbox Code Playgroud)

Car*_*icz 8

我也不是很擅长这个,但......

您是否知道已经有一个"内置"功能将目录树转换为序列?

请参阅http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/file-seq.

也许这将满足您的需求.否则,我们将等到真正聪明的Clojurians出现.


kot*_*rak 5

这个怎么样?

(defstruct file :file)
(defstruct dir :file :contents)

(defn file-tree
  [#^File file]
  (if (.isDirectory file)
    (struct dir file (vec (map file-tree (.listFiles file))))
    (struct file file)))
Run Code Online (Sandbox Code Playgroud)

如果查询结果映射,:file则返回此节点的文件条目.如果你要求:contents并获得nil,那就是一个档案.向量表示目录.

正如卡尔已经说过的那样:也许file-seq更合适.