Clojure可以像Haskell的g . f
那樣實現(g∘f)結構嗎?我目前使用的變通辦法像(fn [n] (not (zero? n)))
,這是幾乎沒有好:)Clojure中的函數組合?
33
A
回答
51
有一個功能clojure.core
做這個叫comp
。例如。
((comp not zero?) 5)
; => true
您可能還需要考慮使用->
/->>
,例如
(-> 5 zero? not)
; => true
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
結合使用not
與when
和if
是常見足夠if-not
和when-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
相關問題
- 1. clojure中的除數函數
- 2. 數組函數的組合
- 3. Fortran中的函數組合
- 4. MapReduce中的函數組合
- 5. C++中的函數組合
- 6. Clojure中的高階函數
- 7. Clojure中的函數定義
- 8. clojure中的函數遞歸
- 9. Clojure reducer fold沒有按預期調用組合函數
- 10. 向clojure函數輸入一組點
- 11. 如何在clojure中組合序列?
- 12. 組合/合併php函數
- 13. Tupled函數組合
- 14. Boost函數組合
- 15. Haskell函數組合
- 16. 組合函數(AND)
- 17. 清理Clojure函數
- 18. Clojure函數文字
- 19. clojure sendoff println函數
- 20. 元組和函數組合
- 21. 組合兩個數組的函數?
- 22. 數組陣列的組合函數
- 23. Writer monad的函數組合?
- 24. C++組合組合高性能函數
- 25. clojure中的預聚合數據結構
- 26. 測試Clojure的comp函數
- 27. Clojure的遞歸函數
- 28. Clojure函數的問題
- 29. clojure庫函數的大O
- 30. 組用Clojure中
確保在Haskell中「currying」時使用'partial'。所以對於map/reduce,你需要做'(讓[reducer(comp(partial)+(partial map get-value))](reducer my-things))' – 2013-05-25 04:17:09
'comp not'也可以替換與'complement':((補零?)5)' – defhlt 2015-01-13 16:13:46