2012-09-19 19 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/) –