我正在尝试构建一个目录树,例如如何以向量的形式表示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)
我也不是很擅长这个,但......
您是否知道已经有一个"内置"功能将目录树转换为序列?
请参阅http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/file-seq.
也许这将满足您的需求.否则,我们将等到真正聪明的Clojurians出现.
这个怎么样?
(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更合适.
| 归档时间: |
|
| 查看次数: |
813 次 |
| 最近记录: |