什么是组合器?
是“没有自由变量的函数或定义”(在SO上定义)吗?
还是这样呢?据约翰·休斯(John Hughes)在他关于箭头的著名论文中所说,“组合器是从程序片段中构建程序片段的函数”,这是有优势的,因为“ ...使用组合器的程序员构造了许多所需的自动编程,而不是手工编写每个细节”。他继续说map
和filter
是这样的组合子的两个常见的例子。
一些符合第一个定义的组合器:
- 小号
- ķ
- ÿ
- 《嘲笑一只模仿鸟》中的其他人(我可能是错的-我没有读过这本书)
一些符合第二个定义的组合器:
- 地图
- 过滤
- 折叠/减少(大概)
- >> =,compose,fmap ?????中的任何一个
我对第一个定义不感兴趣-那些定义不会帮助我编写一个真实的程序(如果您确信我错了,则为+1)。 请帮助我理解第二个定义。我认为map,filter和reduce很有用:它们使我可以进行更高级别的编程-错误更少,代码更短,更清晰。以下是一些有关组合器的具体问题:
- 还有哪些组合器示例,例如地图,过滤器?
- 编程语言通常实现哪些组合器?
- 组合器如何帮助我设计更好的API?
- 如何设计有效的组合器?
- 与非功能语言(例如Java)中的组合器有什么相似之处,或者这些语言代替组合器使用什么?
更新资料
感谢@CA McCann,现在我对组合器有了更好的了解。但是一个问题仍然是我的症结所在:
使用大量使用组合器编写的功能程序与不使用组合器编写的功能程序有什么区别?
我怀疑答案是,繁重的组合版本更短,更清晰,更通用,但是如果可能的话,我希望进行更深入的讨论。
我还在寻找更多fold
常见编程语言中的复杂组合器的示例和解释(即比复杂)。