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