2015-11-06 157 views
-1

我需要開發一個叫做bounds的函數,它將嵌套的數字列表作爲其唯一參數(即樹)。邊界應該返回樹中最大的最大值&。 例如:= =(bounds'(1(-2 17(4)-8(-6 13)(-8 17) 我有一個簡短的版本使用apply max apply min和flatten我只是無法讓我的阻止它在clojure中查找一棵樹的最大值和最小值

使用Clojure的

+2

帖子Ť他編碼到目前爲止。 – somesoaccount

回答

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] 

PS更容易(不加引號需要!)如果你寫你的列表作爲載體:

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

請點擊加入投票和「回答」框!謝謝,艾倫 –

+0

Flatten爲你遞歸:https://github.com/clojure/clojure/blob/clojure-1.7.0/src/clj/clojure/core.clj#L6843 –

+0

另請參閱postwalk和postwalk-demo :http://clojuredocs.org/clojure.walk/postwalk-demo和http://clojuredocs.org/clojure.walk/postwalk –

相關問題