通常我想知道,当我们有一个对象数组时,它可以用特定的函数计算出与"JavaScript中的object Literal"相同的属性。我想在clojure中为我的数组创建该属性,以便对其应用一些计算,例如排序或根据该属性更简单地查找最大值。例如,在本例中如何尝试查找最大值?
(def aSqh (fn [x] (* x x)))
(def maSqh (max (apply aSqh [1 2 3 4])))
输出是对象而不是数字的错误
您似乎在考虑一个映射操作(采用一个参数和一个集合的函数,用该元素上的函数的结果替换每个元素),它在Clojure中被称为map
。apply
是一个函数,用于将集合管道化为函数,就好像将每个元素作为一个单独的参数提供给它们一样。通常,您希望将它与变元函数(即max
等函数,其参数数量可变)一起使用。例如
(def maSqh (apply max (map aSqh [1 2 3 4]))) ;;=> 16
如果要在执行映射后保留集合的数据类型,可以使用into
和empty
:
(defn preserving-map [f coll]
(into (empty coll) (map f coll)))
(preserving-map aSqh [1 2 3 4]) ;;=>[1 4 9 16]
(preserving-map aSqh #{1 2 3 4}) ;;=> #{1 4 9 16}
但这消除了map
通常给我们带来的(有用的)惰性。对于向量的特殊情况(如[1 2 3 4]),这种用例足够常见,以至于有mapv
急切地执行映射并将其放入向量中。