我正在研究我的第一个Clojure计划.我有一些问题想出如何基于如下所示的输入构建树:
["A B" "A C" "C D" "D E" "A F" "F G"]
Run Code Online (Sandbox Code Playgroud)
输出应该是这样的:
'(A (B) (C (D (E)) (F (G)))
Run Code Online (Sandbox Code Playgroud)
我不知道如何开始这样做.例如,当涉及到命令式编程时,我会使用嵌套循环来查找这种关系是否已经存在,当它不存在时,我会找到父元素并将子元素附加到它.但据我所知,函数式编程将使用另一种方法,我将递归地遍历向量中的所有元素,而不是更改现有的树,我构建了一个新的.
我不确定这是否有效,但我有一个看起来像这样的功能:
(defn build-tree
[func tree parent child]
(map (fn [i] (if (seq? i)
build-tree
(func i parent child)))))
Run Code Online (Sandbox Code Playgroud)
我确定这个问题来自于我对Clojure和函数式编程的不熟悉,并且希望有人可以解释使用递归和构建这个树的最佳方法.