Clojure中的函数组合?

时间:2010-05-12 19:33:30

标签: clojure

Clojure可以实现像Haskell g . f这样的构造(g∘f)吗?我目前正在使用像(fn [n] (not (zero? n)))这样的解决方法,这不是很好:)

3 个答案:

答案 0 :(得分:54)

在名为clojure.core的{​​{1}}中有一项功能可以执行此操作。 E.g。

comp

您可能还想考虑使用((comp not zero?) 5) ; => true / ->,例如

->>

答案 1 :(得分:13)

您可以使用Clojure的读取器 - 宏快捷方式为匿名函数重写您的版本,减少击键次数。

user=> (#(not (zero? %)) 1)
true

对于撰写not和其他功能的具体情况,您可以使用complement

user=> ((complement zero?) 1)
true

notwhenif结合使用非常常见,if-notwhen-not是核心功能。

user=> (if-not (zero? 1) :nonzero :zero)
:nonzero

答案 2 :(得分:4)

另一种方式是(reduce #(%2 %1) n [zero? not]),但我喜欢Michal已经提到的(comp not zero?),更好。