函数式编程中的Lambda演算和范畴论对比分析

4

在尝试学习函数式编程方法时,我遇到了lambda演算范畴论这两个术语。

请用通俗易懂的方式解释它们在函数式编程范围内的区别。

它们对函数式编程意味着什么?

谢谢!


7
先学习 λ演算。 - luqui
2
你可以在这里查看范畴论者的观点:https://ncatlab.org/nlab/show/A%20Categorical%20Manifesto - Martín Coll
2
此页面还提供了非常好的见解 https://ncatlab.org/nlab/show/computational+trilogy - Martín Coll
1
Paul Taylor: 数学实用基础。这是一本关于数学的免费在线书籍,广泛涵盖了许多与计算机科学和函数式编程密切相关的数学领域,并且对它们进行了详细的描述(关系代数、范畴论、Curry-Howard同构等)。http://www.cs.man.ac.uk/~pt/Practical_Foundations/index.html - Martín Coll
2
http://www.paultaylor.eu/~pt/prafm/index.html - Martín Coll
1个回答

4
很难对如此广泛的问题做出完全回答。下面,我尝试提供一些见解,但是我不能仅用几段话描述这些广泛的主题。
λ演算是任何函数式编程语言的数学核心。它可以被看作是一个非常简约的编程语言,在不受重负语法干扰的情况下,可以研究FP的关键特性。
任何程序员,特别是FP程序员,都应该能够在几个小时的学习中学会λ演算的基础知识。请注意,即使基础知识相当简单,底层理论也非常广泛:有大量的科学文献专门研究λ演算。人们并不需要为日常FP了解所有这些内容,但不时阅读一些结果可以提供一些FP方面的见解。例如,阅读关于Church编码的内容可以让人意识到λ抽象有多么强大。
范畴论是数学中最抽象的部分之一。与λ演算相比,它要难得多。它可能非常具有挑战性。
CT通常与lambda演算相关联,因为它提供了一种理解类型的好方法。FP中的类型具有基础代数结构,最好通过范畴学来理解。例如,在Haskell中,类型(A,Either B C)和Either(A,B)(A,C)是同构的(至少忽略底部;因为a*(b+c)=(a*b)+(a*c)),大致意味着它们携带相同数量的信息。作为另一个示例,柯里化和反柯里化构成笛卡尔闭范畴的基本思想,这是解释简单类型的“标准”方式。
如果您具有程序员的背景,可以尝试Bartosz Milewski的在线书籍 Category Theory for Programmers。但我建议先从学习FP和lambda演算开始。

“任何程序员,特别是函数式编程程序员,应该能够在几个小时的学习中掌握λ演算的基础知识…” 真的!我们在谈论Y组合器吗? - Mr.Q

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接