2017-05-24 3 views
1

ClojureとScalaはどちらも合成関数/メソッドを持っています(それぞれcomp.compose)。 Scalaには.composeと同じ方法で動作するメソッド.andThenがありますが、逆の順序で関数アプリケーションをネストします。この関数のアナログはClojureに存在しますか?ScalaのandThenのClojure相当

(defn and-then [& fns] (apply comp (reverse fns)))のように簡単に書くことができますが、Clojureではスレッドマクロの式をポイントフリー関数に変換する自然なアプリケーションがあり、例えば以下の2つの式は単項場合に相当します:#(->> % a b c)(and-then a b c)

答えて

3

Clojureのは中置構文(すなわち(and-then f g)f andThen gほど明確ではない)を持っていないので、私はおそらく内蔵のものは、ないと思います。あなたはすでに->->>を認識しているので、一般的にその場所で使用されているものです。

+0

私は 'and-then'がプレフィックス言語のベストネームではないことに同意しますが、私はClojureがもっと理にかなった名前のものを持っていることを期待していました。スレッディングマクロは多くの状況で優れていますが、(計算された値ではなく)関数を返す関数(マクロではない)を持つことが有益な場合があります。 – user12341234

+0

確かに。あなたが提案した定義で自分の 'rcomp'を定義するだけのプロジェクトがたくさんあるようです。 –

0

いいえ、Clojureにはそのようなビルトイン機能はありません。あなたが提供したコード例は、私が信じるほど十分です。

関連する問題