什么是组合器??
它是“没有自由变量的函数或定义”(如 SO 所定义)?
或者这个怎么样:根据约翰休斯在他关于箭头的著名论文中的说法,“组合器是一个从程序片段构建程序片段的函数”,这是有利的,因为“......使用组合器的程序员构造了许多想要的自动编程,而不是手动编写每个细节”。他接着说,map
并且filter
是这种组合器的两个常见例子。
一些符合第一个定义的组合子:
- 小号
- ķ
- 是
- To Mock a Mockingbird 的其他人(我可能错了——我没读过这本书)
一些符合第二个定义的组合子:
- 地图
- 筛选
- 折叠/减少(大概)
- >>=, compose, fmap 中的任何一个?????
我对第一个定义不感兴趣——那些不会帮助我编写一个真正的程序(如果你说服我我错了,+1)。 请帮助我理解第二个定义。我认为 map、filter 和 reduce 很有用:它们让我可以在更高层次上进行编程——更少的错误、更短和更清晰的代码。以下是我关于组合器的一些具体问题:
- 还有哪些组合器的示例,例如 map、filter?
- 编程语言经常实现哪些组合子?
- 组合器如何帮助我设计更好的 API?
- 如何设计有效的组合器?
- 什么是非函数式语言(比如 Java)中的组合子,或者这些语言用什么来代替组合子?
更新
感谢@CA McCann,我现在对组合子有了更好的理解。但是一个问题对我来说仍然是一个症结:
使用大量组合子编写的函数程序和不使用组合子编写的函数程序有什么区别?
我怀疑答案是重组合器的版本更短、更清晰、更通用,但如果可能的话,我希望能进行更深入的讨论。
我也在寻找fold
常见编程语言中复杂组合子(即比 更复杂)的更多示例和解释。