我一直在尝试学习函数式编程,而我发现的大多数教程都将数学作为更复杂的结构(在某些情况下甚至是简单的结构)的示例。为什么是这样?我想可以使用更简单的方法。这使得它很难学习。
背景信息:我已经编写软件已有12年了。我了解一些概念,例如闭包,作为一等公民的功能和泛型。在某些高级水平上,我可能对高阶函数有疑问,但是我想相信我已经掌握了基本知识。Monads在咬我,这时我还没有超越(我敢肯定,最终,因为我坚持不懈)。
我一直在尝试学习函数式编程,而我发现的大多数教程都将数学作为更复杂的结构(在某些情况下甚至是简单的结构)的示例。为什么是这样?我想可以使用更简单的方法。这使得它很难学习。
背景信息:我已经编写软件已有12年了。我了解一些概念,例如闭包,作为一等公民的功能和泛型。在某些高级水平上,我可能对高阶函数有疑问,但是我想相信我已经掌握了基本知识。Monads在咬我,这时我还没有超越(我敢肯定,最终,因为我坚持不懈)。
Answers:
他们之所以使用数学,是因为函数式编程非常擅长对数学结构进行建模,并且与数学概念(尤其是Lambda微积分)紧密相关。同样,由于在各种功能范式数学的许多语言中,通过各种语言的REPL,I / O通常是相当棘手且高级的学科,因此一开始是一种很好的教学语言的方法。
由于函数式编程将函数视为编程语言中的第一类构造,因此函数生成变得非常重要。因此,高等数学尤其是图论变得相当重要。
祈使语言在数学上也一样,但是由于它们离机器的距离越来越近,反正只能相加,所以它全部都是算术运算。具有较高抽象性的功能语言更倾向于数学。学术界的普遍使用既无济于事,也无济于事,因此由了解很多数学并且正在教期望学习很多数学的人们来教书。因此,可以说它“愚蠢”,但是考虑到这些因素,这是不可能的。
http://learnyouahaskell.com/-可能是函数式编程最温和的介绍之一,我仔细检查了一下,那里没有除基本代数和图论之外的任何内容。
原因有很多,它们都是相关的:
而且,FP确实比其他范式还算不上数学,但是关键概念(作为真正的一等公民的功能,高阶功能,闭包和纯正)需要一定的心态。在某个时候,您的思想应该“点击”;如果您理解了这4个核心思想,那么其余的思想可能与任何其他范例一样简单。
这是因为从根本上讲,计算机编程是数学。功能语言的设计考虑了这一点,这就是为什么许多教程都将重点放在数学上的原因。
如果您不习惯将计算机编程视为具有数学基础,这是很难学习的。