是否有核心Clojure功能可以执行以下操作?
(defn call [f & xs] (apply f xs))
在JS中,我认为它是Function.prototype.call
,但我在Clojure中找到的最接近的是apply
。
我试图将一组函数应用于等长的操作数数组。
(map call [inc dec identity] [1 1 1])
;; ===> [2 0 1]
我会使用apply
,但它不会作为map
的参数工作,因为它需要一个参数列表,而不仅仅是参数。
它可以以一种微不足道的方式内联实现,但不能用多方式实现,而且感觉很麻烦。
(map #(%1 %2) [inc dec identity] [1 1 1])
也可以通过申请和一些重新安排来完成。
(map apply [inc dec identity] [[1] [1] [1]])
但这感觉更加混乱。