2017-05-24 63 views
1

Clojure和Scala都有构成函数/方法(分别为comp.compose)。 Scala有一个方法.andThen,其工作原理与.compose相同,只是它按照相反顺序嵌套函数应用程序。 Clojure中是否存在此函数的模拟?Clojure相当于Scala's,然后

我可以写很容易够我自己的例子是这样的: (defn and-then [& fns] (apply comp (reverse fns))),但它似乎很基本的,它必须已经存在,特别是用Clojure它在将线程宏表达式为自由点功能自然应用,例如以下两个表达式将在一元的情况下相当于:#(->> % a b c)(and-then a b c)

回答

3

我不认为有什么内置的,可能是因为Clojure中没有中缀语法(即(and-then f g)并不像f andThen g清晰)。正如你已经认识到的那样,->->>就是它通常用在的地方。

+0

我同意'和然后'不是一个前缀语言的最佳名称,但我希望Clojure有一个更有意义的名称。线程宏在很多情况下都很棒,但有时候有一个函数(而不是宏)返回一个函数(而不是计算的值)是有益的。 – user12341234

+0

确实。看起来很多项目只是用你所建议的定义来定义他们自己的'rcomp'。 –

0

不,在Clojure中没有这样的内置功能。我相信你提供的代码示例是足够好的。