【问题标题】:Combine one-arg functions into a multi-arg one in Clojure在 Clojure 中将单参数函数组合成多参数函数
【发布时间】:2012-04-26 14:42:31
【问题描述】:

我想知道 Clojure 中是否有一个习惯用法,可以将多个单参数函数组合成一个接受向量的新函数。新函数应该将第一个函数应用于第一个参数,依此类推。

我认为这在许多情况下都很有用。例如,您可能希望使用更简单的一维函数来转换点的 x、y 和 z 坐标。

我会自己实现如下,但恐怕标准API中应该已经存在类似的东西了。

(defn vector-comp [& fns]
  (fn [avect]
    (vec (map #(%1 %2) fns avect))))

【问题讨论】:

  • 请注意 (vec ...) 而不是 (into [] ...)
  • 事实上,在 Clojure 中通常不需要强制转换为向量——序列在大多数情况下都可以使用向量。

标签: clojure function-composition


【解决方案1】:

【讨论】:

  • 恭喜获得 [clojure] 徽章。 :-)
【解决方案2】:

其他写法:

(defn vector-comp [& fns]
    #(map apply fns % (repeat nil)))

我 99% 确定标准库中没有现成的解决方案(juxt是我所知道的最接近的解决方案)

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多