Java 可变树到持久树
在学习Clojure(和函数式编程)时,我偶然发现了一个问题:如何将一个表示为嵌套Java 可变树到持久树,java,clojure,tree,Java,Clojure,Tree,在学习Clojure(和函数式编程)时,我偶然发现了一个问题:如何将一个表示为嵌套java.util.ArrayLists的可变n元树转换为一个持久树 使用非函数式编程,您通常会从根到叶创建树。使用持久数据结构似乎不可能做到这一点 有人能告诉我如何在给定可变n元树的情况下构造不可变树吗?与大多数函数一样,答案是递归。事实上,从功能上讲,这比在java中改变一组列表要容易得多。您只需定义一个函数,将单个ArrayList转换为clojure列表,然后让该函数在任何子列表上递归调用自己。这是最简单的
java.util.ArrayList
s的可变n元树转换为一个持久树
使用非函数式编程,您通常会从根到叶创建树。使用持久数据结构似乎不可能做到这一点
有人能告诉我如何在给定可变n元树的情况下构造不可变树吗?与大多数函数一样,答案是递归。事实上,从功能上讲,这比在java中改变一组列表要容易得多。您只需定义一个函数,将单个ArrayList转换为clojure列表,然后让该函数在任何子列表上递归调用自己。这是最简单的答案;如果您想支持地图而不是列表或任何东西,可以添加装饰
(import '(java.util List ArrayList))
(defn lists->tree [x]
(if (instance? List x)
(map lists->tree x)
x))
(lists->tree (ArrayList. [(ArrayList. [1 2 3])
(ArrayList. [(ArrayList. [4 5])
(ArrayList. [6])])]))
((1 2 3) ((4 5) (6)))
这是一个开始: