Clojure Tree函数中的子树总计

时间:2015-11-15 12:35:04

标签: clojure tree functional-programming lisp

我希望我能得到一些帮助,我试图传递一个输入

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

我想要做的就是浏览树并返回包含最大总数的子树。所以在这种情况下,它会返回1 + 8 + 8

的子树

我已经尝试使用以下代码实现它并编译,但是我遇到了让它工作的问题,我知道代码不是真的可以抓到因为我在语言中很新,所以任何人都可以帮助我试图修复我的解决方案??

(defn leaf [leaf]
 leaf)

1 个答案:

答案 0 :(得分:2)

对您的代码的评论:

  • (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的文档。