2010-05-12 47 views

回答

51

有一个功能clojure.core做这个叫comp。例如。

((comp not zero?) 5) 
; => true 

您可能还需要考虑使用->/->>,例如

(-> 5 zero? not) 
; => true 
+2

确保在Haskell中“currying”时使用'partial'。所以对于map/reduce,你需要做'(让[reducer(comp(partial)+(partial map get-value))](reducer my-things))' – 2013-05-25 04:17:09

+1

'comp not'也可以替换与'complement':((补零?)5)' – defhlt 2015-01-13 16:13:46

4

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

12

您可以使用Clojure的reader-macro快捷键为匿名功能以较少的击键重写您的版本。

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

用于组成not和其他功能的特定情况下,可以使用complement

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

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

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

阅读器宏的快捷方式似乎非常有用,因为代码简洁易读。我也不知道“if-not”和“when-not”,谢谢! – StackedCrooked 2010-05-12 23:25:42

+0

*核心宏。 “if-not”和“when-not”是宏,所以没有运行时成本。 – Carcigenicate 2017-03-24 19:52:04