什么是 FP?

发布于 2022-08-13 08:19:49 字数 877 浏览 9 评论 9

C、Java、Pascal、Ada 等等,都是命令式(imperative)语言。“命令式”的意思是它们由一序列被严格的一条接一条执行的命令(command)组成。

Haskell 是一种 functional 语言。

Functional 程序是一个单一的表达式,执行它即对表达式求值。

任何使用过 Excel(或者别的什么电子表格)的人都有 functional 编程的经验:
问题的焦点在于要计算什么,而不是如何计算。

例如:

* 格子里要么是数字(常量),要么就是公式(由运算符和别的格子构成)
* 我们不指定格子应该以什么样的顺序计算,但是不论计算机以什么样的格子计算,它肯定只有一个结果。
* 计算有些格子之前,可能需要先把另一些格子计算出来,不过这是计算机的事,我们并不关心。我们只关心格子和格子之间的数值关系。
* 我们不指定如何分配内存,而且,我们希望电子表格呈现给我们一个似乎是无穷的格子平面,并且只给那些真的使用的格子分配内存。
* 在很大程度上,我们通过表达式来指定格子值,而不是命令序列来计算值。

根据 Excel 的不能指定重算顺序的特征,有一个有趣的的推论是,赋值概念没有什么用了
为什么呢?呵呵,如果你不能确切的知道赋值到底发生在何时,那么你也多半不需要它。

这与传统语言如C的程序——它实质上由一些仔细指定的赋值序列所组成,或与Java——调用方法的顺序对于程序的意义是至关重要的,形成强烈的对照。

集中于高层的(high-level)“what”而非低层的(low-level)“how”,正是 functional 编程语言的特性。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

对岸观火 2022-08-21 16:52:02

原帖由 DQP 于 2009-3-25 17:39 发表

似乎这个并不能解释什么是才是FP

因为其他的一些语言 (例如 SQL, Prolog)也满足这个特性

另外, 我一直想知道什么才是FP所必须要拥有的元素。 即一门语言拥有了那些特性就可以把它称作FP (不限定于纯FP)

FP 的完全定义是什么,我觉得其实并不重要。
重要的是你知道了些什么,以及如何运用已经知道的这些。

纯学术的讨论也不是我所擅长,FP 的准确定义这个我回答不了你。

少女七分熟 2022-08-21 14:43:34

原帖由 DQP 于 2009-3-25 17:39 发表

似乎这个并不能解释什么是才是FP

因为其他的一些语言 (例如 SQL, Prolog)也满足这个特性

另外, 我一直想知道什么才是FP所必须要拥有的元素。 即一门语言拥有了那些特性就可以把它称作FP (不限定于纯FP)

对头!
原文里确实有一段 SQL!

http://www.haskell.org/haskellwi ... onal_programming.3F

猫七 2022-08-21 12:08:30

集中于高层的(high-level)“what”而非低层的(low-level)“how”,正是 functional 编程语言的特性。

似乎这个并不能解释什么是才是FP

因为其他的一些语言 (例如 SQL, Prolog)也满足这个特性

另外, 我一直想知道什么才是FP所必须要拥有的元素。 即一门语言拥有了那些特性就可以把它称作FP (不限定于纯FP)

深居我梦 2022-08-21 11:15:04

个人理解:
“程序”一词带有一个“序”字,比较偏向 imperative
没有港台的“程式“来的严谨

探春 2022-08-20 22:29:52

原帖由 izhier 于 2009-3-25 17:17 发表

这么说,汉语中的 "program" 翻译 (“程序”) 是不是有一点不严谨呢?

我觉得严谨吧。
“程序”这个词语在我没学编程之前,就一直是这个意思。
比如商标注册程序,六一表彰大会程序,等等。

纸短情长 2022-08-19 05:03:38

原帖由 flw 于 2009-3-25 17:11 发表
不过需要补充的是,“工序性”的这种需求是先天存在的,
的确有很多事就是需要一步一步来,“程序(program)”这个词语也正是这个意思,

这么说,汉语中的 "program" 翻译 (“程序”) 是不是有一点不严谨呢?

提笔书几行 2022-08-17 11:37:02

原帖由 izhier 于 2009-3-25 17:02 发表
是不是可以这样认为:

Functional 语言是一种“描述性”语言
imperative 语言是一种“工序性”语言

然。

不过需要补充的是,“工序性”的这种需求是先天存在的,
的确有很多事就是需要一步一步来,“程序(program)”这个词语也正是这个意思,

所以 Haskell 当中也有“工序”这种性质的代码,
Haskell 管它叫做“动作”。
动作不同于函数,它有副作用(函数没有)。

暖阳 2022-08-16 12:24:19

原帖由 izhier 于 2009-3-25 17:02 发表
是不是可以这样认为:

Functional 语言是一种“描述性”语言
imperative 语言是一种“工序性”语言

可以。

够运 2022-08-14 15:24:34

是不是可以这样认为:

  1. Functional 语言是一种“描述性”语言
  2. imperative 语言是一种“工序性”语言

复制代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文