我正在尝试构建一个目录树,例如 xml 树的表示方式,以向量的形式,我可以使用以下代码段很好地遍历文件系统,但我无法解决如何构建树结构的问题这个的?
(defn trav [dir]
(if (.isDirectory dir)
(do
(println (.getName dir))
(doseq [file (.listFiles dir)]
(if (.isDirectory file)
(trav file)))
)))
最佳答案
这个怎么样?
(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)))
如果您查询
:file
的结果映射,您将获得该节点的文件条目。如果您要求 :contents
并获得 nil
,则它是一个文件。向量表示目录。正如卡尔已经说过的:也许
file-seq
更合适。
关于clojure - 构建目录树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888041/