Clojure中的动态函数链

时间:2014-07-14 21:31:00

标签: clojure functional-programming

是否有任何惯用的方法来做一些类似于 - >的事情宏,但有一个动态的功能列表?

即。将向量中的每个函数应用于最后一个函数的输出(所有函数都接受一个参数)

2 个答案:

答案 0 :(得分:3)

一个典型的习语是

(reduce #(%2 %) init fns)

例如,

(reduce #(%2 %) 0 [inc #(* 40 %) inc inc]) 
;=> 42

答案 1 :(得分:2)

您可以使用内置comp功能。你会想要这样的东西:

(defn f [fns & args]
   (let [all-fns (apply comp (reverse fns))]
      (apply all-fns args)))

并使用它:

(f [+ -] 1 2 3)
; -6