私はチェーンにClojureの中にいくつかの関数をしようとしている:複数の機能をチェーンするにはどうすればいいですか?
(f4 (f3 (f2 (f1 foo))))
は、このための任意の便利なシンタックスシュガーはありますか?ような何か:
(with-all-of-them foo f1 f2 f3 f4)
私はチェーンにClojureの中にいくつかの関数をしようとしている:複数の機能をチェーンするにはどうすればいいですか?
(f4 (f3 (f2 (f1 foo))))
は、このための任意の便利なシンタックスシュガーはありますか?ような何か:
(with-all-of-them foo f1 f2 f3 f4)
使用マクロ->
。
(-> foo f1 f2 f3 f4)
またはreduce
:
(reduce #(%2 %1) foo [f1 f2 f3 f4])
'reduce'トリックはちょっとバロックのようにかわいいです:) – vemv
@vemv' - > 'はかわいいと思います。 'reduce'オプションは操作パターンをはっきりと示し、スレッドマクロとは異なり、コンパイル時には未知のシーケンスを取ることができます。 –
実際with-all-of-them
のあなたの説明は、あなたが自分自身を呼び出す必要があります関数を返すcomp
ことを除いて、comp
に非常に近いです:
(f4 (f3 (f2 (f1 foo))))
== ((comp f4 f3 f2 f1) foo)
したがって、with-all-of-them
は、
(defn with-all-of-them [arg & fs]
((apply comp fs) arg))
あなたはcompを意味しますか? –
http://stackoverflow.com/questions/11918554/can-clojure-evaluate-a-chain-of-mixed-arity-functions-and-return-a-partial-functを参照してください。それがあなたに役立つかどうかを確認してください。 –