免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9914 | 回复: 16
打印 上一主题 下一主题

什么是 FP? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-25 16:54 |只看该作者 |倒序浏览
C、Java、Pascal、Ada 等等,都是命令式(imperative)语言。“命令式”的意思是它们由一序列被严格的一条接一条执行的命令(command)组成。

Haskell 是一种 functional 语言。

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

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

例如:

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

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

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

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

论坛徽章:
0
2 [报告]
发表于 2009-03-25 17:02 |只看该作者
是不是可以这样认为:

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

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2009-03-25 17:07 |只看该作者
原帖由 izhier 于 2009-3-25 17:02 发表
是不是可以这样认为:

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

可以。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2009-03-25 17:11 |只看该作者
原帖由 izhier 于 2009-3-25 17:02 发表
是不是可以这样认为:

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

然。

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

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

论坛徽章:
0
5 [报告]
发表于 2009-03-25 17:17 |只看该作者
原帖由 flw 于 2009-3-25 17:11 发表
不过需要补充的是,“工序性”的这种需求是先天存在的,
的确有很多事就是需要一步一步来,“程序(program)”这个词语也正是这个意思,

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2009-03-25 17:19 |只看该作者
原帖由 izhier 于 2009-3-25 17:17 发表

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

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

论坛徽章:
0
7 [报告]
发表于 2009-03-25 17:28 |只看该作者
个人理解:
“程序”一词带有一个“序”字,比较偏向 imperative
没有港台的“程式“来的严谨

论坛徽章:
0
8 [报告]
发表于 2009-03-25 17:39 |只看该作者
集中于高层的(high-level)“what”而非低层的(low-level)“how”,正是 functional 编程语言的特性。

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

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2009-03-25 17:41 |只看该作者
原帖由 DQP 于 2009-3-25 17:39 发表

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

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

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

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2009-03-25 17:43 |只看该作者
原帖由 DQP 于 2009-3-25 17:39 发表

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

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

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

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

纯学术的讨论也不是我所擅长,FP 的准确定义这个我回答不了你。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP