Clojure可以实现像Haskell g . f
这样的构造(g∘f)吗?我目前正在使用像(fn [n] (not (zero? n)))
这样的解决方法,这不是很好:)
答案 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
将not
与when
和if
结合使用非常常见,if-not
和when-not
是核心功能。
user=> (if-not (zero? 1) :nonzero :zero)
:nonzero
答案 2 :(得分:4)
另一种方式是(reduce #(%2 %1) n [zero? not])
,但我喜欢Michal已经提到的(comp not zero?)
,更好。