什么是组合子?
是“没有自由变量的函数或定义”(在SO上定义)?
或者这个怎么样:根据John Hughes在他着名的关于Arrows的论文中,“组合器是一个从程序片段构建程序片段的函数”,这是有利的,因为“......使用组合器的程序员自动构建大部分所需程序,而不是手工编写每个细节”。他接着说map
和filter
是这类组合子的两个常见例子。
符合第一个定义的一些组合器:
符合第二个定义的一些组合器:
我对第一个定义不感兴趣 - 那些不能帮我写一个真正的程序(如果你说服我错了,那就是+1)。 请帮助我理解第二个定义。我认为map,filter和reduce非常有用:它们允许我在更高级别编程 - 更少的错误,更短更清晰的代码。以下是关于组合器的一些具体问题:
更新
感谢@C。 A. McCann,我现在对组合器有了更好的理解。但是有一个问题对我来说仍然是一个棘手的问题:
用大量使用组合器编写的函数程序和没有编写函数的函数有什么区别?
我怀疑答案是组合重型版本更短,更清晰,更通用,但如果可能的话,我希望进行更深入的讨论。
我也在寻找更多关于复杂组合子的例子和解释(即比fold
更复杂)。
答案 0 :(得分:91)