我需要開發一個叫做bounds的函數,它將嵌套的數字列表作爲其唯一參數(即樹)。邊界應該返回樹中最大的最大值&。 例如:= =(bounds'(1(-2 17(4)-8(-6 13)(-8 17) 我有一個簡短的版本使用apply max apply min和flatten我只是無法讓我的阻止它在clojure中查找一棵樹的最大值和最小值
使用Clojure的
我需要開發一個叫做bounds的函數,它將嵌套的數字列表作爲其唯一參數(即樹)。邊界應該返回樹中最大的最大值&。 例如:= =(bounds'(1(-2 17(4)-8(-6 13)(-8 17) 我有一個簡短的版本使用apply max apply min和flatten我只是無法讓我的阻止它在clojure中查找一棵樹的最大值和最小值
使用Clojure的
您需要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]
請點擊加入投票和「回答」框!謝謝,艾倫 –
Flatten爲你遞歸:https://github.com/clojure/clojure/blob/clojure-1.7.0/src/clj/clojure/core.clj#L6843 –
另請參閱postwalk和postwalk-demo :http://clojuredocs.org/clojure.walk/postwalk-demo和http://clojuredocs.org/clojure.walk/postwalk –
帖子Ť他編碼到目前爲止。 – somesoaccount