clojure - Clojure 树函数中的子树总计

标签 clojure tree functional-programming lisp

嗨,我希望我能得到一些帮助,我正在尝试传递输入

User==> (biggest-branch  [[1 [3 2]] [1 [8 8]]])

我想做的是遍历树并返回包含最大总数的子树。所以在这种情况下它将返回 1+8+8 的子树

我尝试使用以下代码来实现它并进行编译,但是我在使其工作时遇到问题,我知道代码并不是真正达到标准,因为我对语言还很陌生,所以任何人都可以帮助我尝试修复我的解决方案?

(defn leaf [leaf]
 leaf)

最佳答案

对您的代码的评论:

  • (seq? []) 返回 false。您想使用coll吗?

  • 您的 sum-tree 函数看起来像是语法错误,这可能就是您收到错误的原因。我建议在可以自动缩进的环境中工作并尽可能多地使用该功能。它应该更快地揭示此类问题。

  • 每个分支都是一棵树。你在某种程度上已经认识到了这一点,但并没有完全接受它。不需要单独的 branch-totalsum-tree 函数,因为它们是同一件事。

  • leaf 函数不是必需的。它与identity功能相同。


这应该是所需的全部代码:

(defn sum-tree [tree]
  (if (coll? tree)
    (apply + (map sum-tree tree))
    tree))

(defn biggest-branch [tree]
  (apply max-key sum-tree tree))

(biggest-branch [[1 [3 2]] [1 [8 8]]])
; => [1 [8 8]]

查看 max-key 的文档.

关于clojure - Clojure 树函数中的子树总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33719713/

相关文章:

functional-programming - 创建一个具有可变但固定数量参数的函数

clojure - 何时在 Clojure 中使用 reduce-kv 而不是 reduce?

python - 递归向 zss 树添加节点

java - 正确地从树中删除节点

mysql - 在关系数据库中存储树结构的已知方法是什么?

data-structures - 是否有双向多映射持久数据结构?

xml - 使用 Clojure zippers 过滤 XML 中的元素节点

http - 了解 Ring 和 Appengine-magic (Clojure) 上的处理程序

clojure - 从 clojure 中的数组构建 HashMap

Scala - 在没有多态性的情况下实现多态抽象特征