我对Clojure非常非常非常新(如昨天开始的那样)。
我有一个数字列表,需要找到列表中最大的数字。
到目前为止,我已经想出了类似的东西:
def boxes [1 2 3 4 5])
(println "List of box volumes:" boxes)
(defn top-one [[big1 :as acc] x]
(cond
(> x big1) [x big1]
:else acc))
(defn top-one-list [boxes]
(reduce top-one [0] boxes))
(println "Biggest volume from boxes:" top-one-list)
最后一个println给了我一些奇怪的东西:
#<core$_main$top_one_list__30 proj_one.core$_main$top_one_list__30@13c0b53>
有什么想法吗?
答案 0 :(得分:12)
函数max返回它传递的参数的最大值:
(max 1 2 3 4 5)
要使用序列调用它,您可以使用apply:
(apply max boxes)
Dao Wen指出,如果序列可能为空,则reduce允许指定默认值:
(reduce max -1 []) # returns -1
和申请相同:
(apply max -1 []) # returns -1
否则申请会爆炸:
user=> (apply max [])
ArityException Wrong number of args (0) passed to: core$max clojure.lang.AFn.th
rowArity (AFn.java:437)
答案 1 :(得分:0)
另一个答案已经为您提供了找到最大数字的正确解决方案。我想补充一下为什么你的解决方案(无论如何返回其他东西,不仅仅是最大的数字,还包括之前被认为是最大的所有数字的列表)都无效。
问题是,在println
来电的参数列表中,您没有呼叫top-one-list
,您只是指功能本身。您需要将其更改为(top-one-list boxes)
以调用该函数。