函数式编程与数学紧密相关吗?


21

函数编程是否与数学如此相关,因为很多函数编程都是用数学概念来表示的?对于具有一定背景的程序员,必须具有扎实的数学基础才能学习和理解函数式编程?


1
这个问题是否正确地标记了mathematica或应该是数学?

这里这里是两个非常相似的问题。我认为您不必在数学上有“坚实的基础”,但是从某种角度来说,您需要对它的原理有一个很好的理解。几何在内存映射方面对我的帮助最大,但我很少再考虑数字了。数学是(可能)非常有用的。
Garet Claborn

Answers:


28

所有编程都与数学有关。实际上,许多大学仍将其计算机科学程序置于数学系的职权范围内。

至于学习函数式编程,您不需要具备扎实的数学基础即可学习它。我现在已经学会了三种不同的功能语言,达到了一定的熟练程度(Haskell,Erlang,Clojure),而我自己的数学技能却非常薄弱。Haskell的社区的确可以以数学为中心来谈论事物,这有点令人讨厌,但是Erlang和Clojure都是非常实用的函数式编程语言,因为教程信息是表面上写的,所以它们并不难学对于程序员而言,不是硬核数学极客。话虽这么说,尽管我在数学上有障碍,但我确实选择了Haskell,所以这并非没有可能。

我在选择一般的声明式编程语言(功能是其中的一个子集)时发现的真正困难是放弃了控制的欲望。告诉计算机该怎么办。这需要一些习惯。


好话,+ 1。
Mudassir

4
当您很好地学习SQL时,声明式编程并不是那么困难。

7

是。本质上,一个功能程序就是一堆这样的语句:

// 1_和2_是“虚拟参数” f(1_):= sin(1_)g(1_,2_):= 1_ + 2_等...

x = f()

y = g(x)

z = h(x,h2(y))

等等...

您正在以方程式的形式编写程序应该做的事情,这些方程式将新值(注意:不是变量)定义为先前定义的值的函数。您还将功能定义为关系。这确实与数学定理的编写方式非常相似。


我比Haskell和其他人的古怪故事更能理解数学函数。您是否有任何链接将数学步骤与任何功能语言的语法相关联。
RainDoctor 2015年

这个答案很准确。一旦意识到(并内部化)您正在编写数学函数而不是分步过程,FP就会开始变得非常有意义。大多数人都首先学习过程编程,而且包bag很大。我认为程序语言中的“功能”应该称为“程序”。
卡卡吉

2

IMO Mathematica,作为您可以使用函数式编程的语言的示例,不需要强大的数学背景。实际上,我认为我在基础数学教学中没有遇到像函数式编程这样的事情。我开始使用C风格进行Mathematica编程,仅几年后就发现了函数式编程。我不认为基本的功能编程结构喜欢MapApplyNestList,等需要在所有任何的数学背景。


1

并不是的。函数式编程只是一种方法,但是它的基础是lambda微积分和类似的东西。

闭包是(小的)尝试将函数式编程概念引入过程语言。代替for(int i =0 ; i < num; i++) doStuff(arr[i]);,您可以假设数组的元素固有地可以对它们进行“填充”,因此arr.each do |el| doStuff(el) end


10
您仅举例说明一个匿名函数,而不是闭包。维基百科:The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.

1

简短的答案是:是的,因为对于不同程度的数学,具有一定程度的形式化的所有内容(例如编程语言)都与数学密切相关。

但是,使用编程语言并不严格要求您熟悉数学,例如语言的理论基础。您不必知道上下文无关的语言是什么,以及该语言要使用的法律和财产。同样,您不必一定会说德语或罗马语才能说德语或法语。

“数学”符号不是功能语言的共同属性。与Haskell相比,Scala和所有基于Lisp的语言具有非常不同的语法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.