2012-09-19 18 views
5

我有一个函数向量(def my-func [a b c d])。每个函数都将最后一个函数的输出作为输入。我想通过他们提出意见,我该怎么做?线程通过函数向量

如何获取以下表格(-> in a b c d)

感谢, 穆尔塔扎

回答

5

您可以使用comp但是要注意它执行的功能,从右到左

((comp d c b a) 10) 

((apply comp my-fns) 10) 

会传递10到第一个函数,结果到下一个函数等等。

+0

感谢您的优雅解决方案史密斯。 – murtaza52

+0

不客气。还有一个函数['juxt'](http://clojuredocs.org/clojure_core/clojure.core/juxt),它将多个函数作为参数并将参数应用于每个返回结果向量的函数'(( (juxt + - * /)3 2)=> [5 1 6 3/2]' –

5

我想你可以使用reduce功能:

(def fns [inc inc inc]) 
(reduce (fn [v f] (f v)) 10 fns) 
+0

谢谢dAni,这是一个美妙的方式! – murtaza52

+0

这让我想起@fogus在[Clojure中的鹅口疮]中所谈论的(http://blog.fogus.me/2010/09/28/thrush-in-clojure-redux/) –