我正在尝试构建一个目录树,例如如何表示xml树,以向量的形式,我可以使用以下代码段遍历文件系统,但我无法理解如何构建一个树结构出来了吗?
(defn trav [dir]
(if (.isDirectory dir)
(do
(println (.getName dir))
(doseq [file (.listFiles dir)]
(if (.isDirectory file)
(trav file)))
)))
答案 0 :(得分:8)
我也不是很擅长这个,但是......
您是否知道已有“内置”功能将目录树转换为序列?
请参阅http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/file-seq。
也许这会满足您的需求。否则,我们将等到真正聪明的Clojurians出现。
答案 1 :(得分: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)))
如果查询:file
的结果地图,则会返回此节点的文件条目。如果您要求:contents
并获取nil
,那么它就是一个文件。向量表示目录。
正如卡尔已经说过的那样:也许file-seq
更合适。