解释工人的组合器

时间:2011-09-23 19:26:19

标签: functional-programming combinators

什么是组合子?

“没有自由变量的函数或定义”(在SO上定义)?

或者这个怎​​么样:根据John Hughes在他着名的关于Arrows的论文中,“组合器是一个从程序片段构建程序片段的函数”,这是有利的,因为“......使用组合器的程序员自动构建大部分所需程序,而不是手工编写每个细节”。他接着说mapfilter是这类组合子的两个常见例子。

符合第一个定义的一些组合器:

符合第二个定义的一些组合器:

  • 地图
  • 过滤
  • 折叠/减少(推测)
  • 任何>> =,撰写,fmap ?????

我对第一个定义不感兴趣 - 那些不能帮我写一个真正的程序(如果你说服我错了,那就是+1)。 请帮助我理解第二个定义。我认为map,filter和reduce非常有用:它们允许我在更高级别编程 - 更少的错误,更短更清晰的代码。以下是关于组合器的一些具体问题:

  1. 有哪些组合器的例子,例如map,filter?
  2. 编程语言经常使用哪些组合器?
  3. 组合器如何帮助我设计更好的API?
  4. 如何设计有效的组合器?
  5. 什么是类似于非功能语言(比如Java)的组合器,或者这些语言用什么代替组合器?

  6. 更新

    感谢@C。 A. McCann,我现在对组合器有了更好的理解。但是有一个问题对我来说仍然是一个棘手的问题:

    用大量使用组合器编写的函数程序和没有编写函数的函数有什么区别?

    我怀疑答案是组合重型版本更短,更清晰,更通用,但如果可能的话,我希望进行更深入的讨论。

    我也在寻找更多关于复杂组合子的例子和解释(即比fold更复杂)。

1 个答案:

答案 0 :(得分:91)