2012-09-19 4 views
5

私は関数(def my-func [a b c d])のベクトルを持っています。各関数は最後の関数の出力を入力として取ります。私はそれらを介して入力をスレッドしたい、どのように私はそれを行うのですか?関数のベクトルを通るスレッド

次のフォームにどうすればいいですか?(-> in a b c d)

おかげで、 Murtaza

答えて

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/) –

関連する問題