Functional programming 寻找函数式编程词典

Functional programming 寻找函数式编程词典,functional-programming,Functional Programming,了解一个领域的暗语对我有很大帮助,特别是因为它允许我与那些比我知道得多的人进行智能对话,所以我想找到一个函数式编程术语的好词典 例如,我反复遇到这些:函子、箭头、类别、Kleisli、单子、幺半群、真正的态射动物园等等。我还注意到其中许多出现时带有前缀,如“协变”、“co-”和“endo-”等 其中,我可以说我确实理解幺半群和协变,有点像单子,但其他的对我来说仍然是胡言乱语。(请注意,我并不是说这个列表是详尽无遗的,我不希望在这里为我定义或描述这些内容,我只是在寻找学习资源。) 有人能给我指一下

了解一个领域的暗语对我有很大帮助,特别是因为它允许我与那些比我知道得多的人进行智能对话,所以我想找到一个函数式编程术语的好词典

例如,我反复遇到这些:函子、箭头、类别、Kleisli、单子、幺半群、真正的态射动物园等等。我还注意到其中许多出现时带有前缀,如“协变”、“co-”和“endo-”等

其中,我可以说我确实理解幺半群和协变,有点像单子,但其他的对我来说仍然是胡言乱语。(请注意,我并不是说这个列表是详尽无遗的,我不希望在这里为我定义或描述这些内容,我只是在寻找学习资源。)


有人能给我指一下FP词典吗?只要有可能找到它,它就不需要在线(而且这不是一本罕见的书,我要花几十美元才能买到)。

你作为例子使用的许多术语都来自范畴理论,在这种情况下,我所知道的最好的资源是本杰明·皮尔斯的《计算机科学家的基本范畴理论》这些不是函数式编程术语;它们是范畴理论中的术语。确实,少数精英函数式程序员似乎使用范畴理论来深入了解函数式编程(Conal Elliott、Ralf Hinze、钟杰山、给你的办公室打电话),但这些人是少数。关于这些术语,我很难理解皮尔斯的书,但我不知道有什么更好的来源,尽管他的博客上有很多相关资料;我鼓励你去那里看看。(2012年更新:哈罗德·西蒙斯(Harold Simmons)有一本关于范畴理论的新书,看起来很不错,而且[在付费墙后面]的计算评论对它进行了很好的审查。唯一的抱怨是,这些例子都来自数学,而不是计算。)


你可能会从函数编程中听到一些词:“映射函数”、“折叠函数”、“高阶函数”、“无点编程”、“和型”、“积型”、“亚同态”、“Church编码”、“计算程序”、“类型定向编程”、“适当尾部调用”、“累积参数”。我不知道在一个地方有什么好的词典。格雷厄姆·赫顿(Graham Hutton)的《哈斯克尔编程》(Programming in Haskell)一书或理查德·伯德(Richard Bird)和菲尔·瓦德勒(Phil Wadler)的旧书可能是一个起点。

正如其他答案所指出的那样,要真正理解这些术语,你必须学习范畴理论。然而,范畴理论非常抽象,可能无法帮助你立即建立直觉。要查看抽象概念的实际应用,我强烈推荐Typeclassopedia()。

维基百科总是有效的:“一个单子或三元组是一个(endo-)函子,以及两个相关的自然变换。单子在伴随函子对理论中很重要,它们将偏序集上的闭包算子推广到任意类别。“单子代数”的概念从普适代数中概括了经典概念,从这个意义上说,单子可以被认为是“理论”。" .................. 好吧,也许并不总是最好的资源。好笑。虽然我喜欢在字典里查找英语单词,但这些并没有提供同样的乐趣。公平地说,维基百科有一篇关于FP使用的单子的单独文章,而且数学性稍低。它甚至没有那么昂贵:在美国为21美元。一位同事建议,该文本与当前的FP用法不太一致。他指出,它根本不涉及单子,这可能是FP世界(或者看起来是这样)最大的一个困扰。我听说过的过多的态射也没有出现。简言之,它似乎是程序员的范畴理论入门,而不仅仅是FP技术的简编。”…少数精英函数式程序员似乎使用范畴理论来深入了解函数式编程…”我想我遇到了一群坏人…@Randall:不,你是个幸运的人。我希望我能做到。今年夏天我要再试一次……诺曼,你不知道你让我对过去几个月我读过的哈斯凯尔那些令人费解的论文感觉有多好。我最近听到有人开玩笑说,理解哈斯克尔需要两个博士学位。如果你在挣扎,我们其他人还有希望……对不起,我们远远不能纠正像你这样的人,但你称之为“少数”的人不是塑造哈斯克尔文化的人吗?通常在范畴论的背景下给出类同构的一般定义。@Blaisorblade:Haskell文化是一个大帐篷;这里有很多可以塑造的东西。当然,在运用范畴理论方面非常出色的拉尔夫·辛兹塑造了哈斯克尔文化。但西蒙·佩顿·琼斯(Simon Peyton Jones)也有着巨大的影响力,他写了大量几乎没有提到范畴理论的论文。(许多最新的搬运工和摇瓶工都使用依赖类型,这是另一种情况,但我更了解这种情况……)