2010-05-12 60 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