函数式编程

By guenchi at 2019-06-01 • 0人收藏 • 425人看过
大多数计算机程序可以分为两类,命令式和函数式。

命令式程序通过语句方式在语句中更改状态,使用面向语句的循环和子程序(执行副作用且不一定返回值的过程)来进行程序控制。

函数式程序在不改变状态的情况下工作,但是以面向表达式的方式计算值,使用函数(简单地计算和返回值的过程),递归和程序控制的映射。编程语言通常可以根据可以用语言编写的程序的样式放入这两个类别中的一个,这由语言提供的一组功能。

命令式编程语言的主要特征是语句,包括声明(过程和变量),赋值,循环控制语句,条件语句,子例程或函数调用以及算术表达式。

在函数式编程语言中,主要特征是表达式,包括绑定表达式,条件表达式,函数调用和算术表达式。与命令式编程语言相比,函数式编程语言有几个优点:

1.函数式程序更简单。函数式程序是以自然的,递归的方式从表达式构建的。命令式程序是根据复杂的语句或命令与表达式结合而构建的。某些上下文需要表达式,而其他上下文需要语句。表达式中几乎从不允许语句。

2.函数式程序通常更容易理解。程序的每个部分都可以从其上下文中分离出来,并与程序的其余部分分开研究,因为很少或没有状态影响该程序的那一部分。

3.由于结构的规律性和缺乏状态,正确性证明可以更容易地应用于功能性程序。

4.局部变量更简单,在函数式程序中从未未初始化。变量是值的名称而不是存储位置。绑定(声明)变量时建立此值。在命令式程序中,初始赋值通常与其绑定(声明)分开。

5.在函数式编程语言中可以改变求值顺序。程序的两个独立表达式的执行顺序并不重要,缺少状态可确保许多表达式是独立的(例如,函数应用程序的参数)。甚至可以并行执行这样的表达。此外,永远不需要执行其值永远不需要的表达式。


-- Kent Dybvig, Scheme实现的三种模型
5 个回复 | 最后更新于 2019-07-23
2019-07-02   #1

函数式编程,或许王垠总结的更准确:


来自王垠的《函数式语言的宗教》:

http://www.yinwang.org/blog-cn/2013/03/31/purely-functional



说了这么多,对于“函数式语言”这一概念的误解,应该消除得差不多了。其实“函数式语言”唯一的要求,应该是能够在任意位置定义函数,并且能够把函数作为值传递,不管这函数是“纯”的还是“不纯”的。所以像 Lisp 和 ML 这样的语言,其实完全符合“函数式语言”这一称号。


2019-07-02   #2

站长这个文章的排版有问题,已经溢出了。是不是css 样式的问题


2019-07-07   #3

回复#2 @hongson :

有可能


不过我这边看起来是好的


MacOS

2019-07-20   #4

感觉是排版引擎的问题? chrome下面确实是溢出的, 但到了safari下面就好了.

2019-07-23   #5

感谢提供bug


用的一个开源网站系统 目前还没有功夫重写


之后肯定会用Scheme重写 所以就暂时不打算改了

登录后方可回帖

登 录
信息栏

Scheme中文社区

推荐实现 ChezScheme / r6rs / r7rs large
theschemer.org
Q群: 724577239

精华导览

社区项目

包管理器:Raven
HTTP服务器:Igropyr (希腊火)
官方插件:vscode-chez

社区目标:

完善足以使Scheme工程化和商业化的库,特别是开发极致速度的Web服务器和ANN模块。

一直以来Scheme缺少一个活跃的中文社区,同时中文资料的稀少,导致大多数因为黑客与画家和SICP而接触Scheme的朋友,在学完SICP后无事可做,不能将Scheme转换为实际的生产力。最后渐渐的放弃。
同时Chicken等实现,却因效率问题无法与其他语言竞争。本社区只有一个目的,传播Scheme的文明之火,在最快的编译器实现上,集众人之力发展出足够与其他语言竞争的社区和库。


友情链接:

Clojure 中文论坛
函数式·China


Loading...