函数式编程是一种编程范式,其中计算的基础是表达式的求值。一些特点是使用高阶函数、引用透明和惰性计算。编程风格的优点包括程序易于阅读、非常可靠并且可以分解为组件。缺点是计算速度慢,并且样式和语法与其他常见编程样式完全不同。与计算机科学专业人员相比,函数式编程风格更受学术界的欢迎。
顾名思义,函数是这种编程范式的基本组成部分。函数可以嵌套在其他函数中,称为高阶函数,每个高阶函数可以分解为易于理解和调试的构建块函数。一些高阶函数的例子有Map和Nest。函数映射采用函数F和变量列表,例如(x,y,z),并在列表中给出结果:映射[F,(x,y,z)]=(F(x),F(y),F(z))。Nest接受函数F、变量x和迭代次数:Nest[F,x,3]=F(F(F(x))。
纯函数式编程在不改变变量状态的情况下接受输入并返回输出。换言之,具有相同输入的函数将始终给出相同的结果,而不管之前在程序中发生了什么。这称为引用透明性。由于数学函数是引用透明的,函数编程对许多数学家、工程师和科学家来说是直观的。
函数的引用透明性意味着函数求值的顺序并不重要。因此,在需要函数的结果之前,不需要对函数进行求值,这称为延迟求值。这与命令式编程完全不同,命令式编程是一个程序从第一个命令开始,一直运行到最后一个命令。惰性评估跳过程序中不符合逻辑或多余的部分,这会自动优化程序并减少计算时间。
与其他编程范例相比,函数式编程有许多优点。具有清晰输入和输出的功能易于阅读和理解。一旦一个函数被彻底调试,它就可以在其他应用程序中可靠地使用。多核机器可能能够并行计算独立评估的函数,从而大大提高程序的性能。
不幸的是,并不是所有的程序都适合并行计算,而计算功能程序可能相当慢。函数式程序严重依赖递归,这通常比使用传统循环或迭代方法效率低。事实上,函数式编程可能非常笨拙,也很难学习,因为它与其他更常见的范例(如面向对象编程)不同。
学术界倾向于支持函数式编程,因为它提供了一种清晰易懂的方法来编程复杂的现实世界问题。一些纯语言是Haskell和Erlang。Mathematica专攻符号数学,R专攻统计学,J专攻金融分析。Scala和F#等多模式语言支持函数式编程和其他编程风格。
...式编程与命令式编程 5. 摘要 什么是声明式编程(declarative programming)? 声明式编程可以用一个真实的场景来解释。假设用户需要检查新邮件。一种方法是启用收件箱通知。用户只需启用一次通知,每次新邮件到达时,他都会自动...
...与表格形式的命令式编程 6.摘要 什么是函数式程序设计(functional programming)? 函数式程序设计是以数学为基础的。函数式编程背后的关键原则是,所有的计算都被看作是独立数学函数的组合。数学函数将输入映射到输出。假设有...
结构化的(structured)和非结构化程序设计(unstructured programming)的区别 计算机程序是计算机执行用编程语言编写的任务的一组指令。编程范例可以根据语言特性对编程语言进行分类。结构化编程和非结构化编程是两种常见的编程...
功能与程序 计算机编程是软件开发过程的一个阶段。它被认为是一门手艺、一门艺术和一门工程学科,可以为计算机用户遇到的问题创建一个有用的软件解决方案。在编写计算机程序时,程序员使用一种程序设计语言。程序设...
...将在学生表中选择名为“Ann”的所有学生。 什么是功能(function)? 函数是执行特定任务的一组指令。几乎所有的编程语言,如C++、C、java和Python都允许程序员编写函数。一个函数允许重复使用同一组指令。此外,它组织整个代码...
...写自己的构造函数,则不会使用默认构造函数。 Figure 1: Program with C***tructor 在上面的Employee类中,有一个名为Employee的构造函数。有两个实例变量id和name。在第8行中,有一个构造函数,它与类名同名。它初始化id和名称。在主程...
... 静态函数,常数函数,C++ 什么是C++中的静态函数(static function in c++)? 用static关键字定义的函数是静态函数。通常,函数处理对象。程序员使用对象来调用这些函数。但是,它在静态函数中是不同的。它们在类级别工作,而不...