我正在尝试在Clojure中链接一些函数:
(f4 (f3 (f2 (f1 foo))))
这有什么方便的语法糖吗?类似的东西:
(with-all-of-them foo f1 f2 f3 f4)
答案 0 :(得分:9)
使用->
宏。
(-> foo f1 f2 f3 f4)
或reduce
:
(reduce #(%2 %1) foo [f1 f2 f3 f4])
答案 1 :(得分:5)
(-> foo f1 f2 f3 f4)
答案 2 :(得分:4)
实际上,您对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))