在clojure中查找树的最大值和最小值

时间:2015-11-06 19:19:36

标签: clojure tree

我需要开发一个名为bounds的函数,它将一个嵌套的数字列表作为唯一的参数(即:一棵树)。 Bounds应该返回树中最大和最小的值。 例如:= =(界限'(1(-2 17(4)-8(-6 13)( - 8 17) 我有一个简短的版本使用apply max apply min并且展平我只是无法理解它

使用clojure

1 个答案:

答案 0 :(得分:1)

您需要flatten功能:

(defn bounds
  [& args]
  (let [flat-vals (flatten args) ]  ;=> (1 -2 17 4 -8 -6 13)
    [ (apply min flat-vals) (apply max flat-vals) ] ))

(println 
  (bounds '(1 (-2 17 (4)) -8 (-6 13))))
;=> [-8 17]

P.S。如果将列表编写为向量,则更容易(不需要引用!):

(println 
  (bounds [1 [-2 17 [4]] -8 [-6 13]] ))
;=> [-8 17]