最佳答案
什么是组合子
它是 “没有自由变量的函数或定义”(在 SO 上定义的)吗?
或者这个怎么样: 根据 约翰 · 休斯在他关于 Arrows 的著名论文 “组合器是一个从程序片段中构建程序片段的函数”,这是有利的,因为“ ... 程序员使用组合器自动构造大部分所需的程序,而不是手写每一个细节”。他接着说,map
和 filter
是这种组合子的两个常见例子。
一些符合第一个定义的组合子:
一些符合第二个定义的组合符:
我对第一个定义不感兴趣——它们不会帮助我编写一个真正的程序(如果你让我相信我错了,那么 + 1)。请帮助我理解第二个定义.我认为 map、 filter 和 reduce 是有用的: 它们允许我在更高的层次上编程——更少的错误,更短更清晰的代码。下面是我关于组合子的一些具体问题:
更新
感谢@C。麦凯恩,我现在对组合子有了一些更好的理解。但有一个问题仍然困扰着我:
使用组合子编写的函数式程序和不使用组合子编写的函数式程序有什么区别?
我猜想答案是,重组合器版本更短、更清晰、更通用,但如果可能的话,我希望能进行更深入的讨论。
我还在寻找更多的例子和解释复杂的组合符(即更复杂的 fold
)在常见的编程语言。