将矢量从较大的值排序到较小的值

时间:2015-04-30 07:42:34

标签: clojure

如何将矢量从较大的值排序到较小的值,因为这不起作用

(sort > ([3 1 2 4]))

但是,使用>表示地图值是有用的。

(sort > (vals {:foo 5, :bar 2, :baz 10}))
; => (10 5 2)

3 个答案:

答案 0 :(得分:9)

请注意,括号在clojure中总是很重要,而且它们永远不会只是组#34;任意表达。 ([3 1 2 4])将向量调用为没有任何参数的函数。

您想要(sort > [3 1 2 4])

答案 1 :(得分:5)

那是因为你没有将向量传递给sort方法:)

正确的行是:

(sort > [3 1 2 4])

([3 1 2 4])应该为您提供ArityException,因为您尝试将vector用作不带任何参数的函数。

答案 2 :(得分:3)

在您的工作示例中,您通过调用>(这是一个序列)的返回值使用(vals {:foo 5, ...})。请参阅docs here for vals

sort适用于集合(请参阅docs here),因此矢量[3 1 2 4]有效,序列也是如此。

你的错误就是你在尝试"跑步"通过在其周围放置括号来向量(记住任何s-exp的第一个arg是函数调用,除非它被引用为列表)。