问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是函数式编程思维

发布网友 发布时间:2022-04-30 15:34

我来回答

1个回答

热心网友 时间:2022-04-22 11:47

试着把函数想象成一个根据一个指定输入产出指定输出的黑盒,就能简化成逻辑电路中的各种门的样子或者是各种流通管道的样子。

然后试想数据通过这些组合起来的管道/门,变成你要的结果。

或者是通过现有的管道或门,构建(抽象)出更复杂/更通用的管道/门。

这就是函数式编程。

任何支持函数的语言都可以进行函数式风格的编程 注意到与命令式风格不同的是没有赋值,这意味着reason 程序的时候每个变量的值是不变的 不用考虑程序变量随着时间的变化 -- 大大降低了程序的复杂性。

既然C/C++(98) 也能进行函数式风格的编程 为什么不认为它是一门函数式语言呢,因为需要容易的进行函数式编程需要以下几个语言特性支持

closure

按照上面的三条规则函数式是first class 的 是可以直接传递作为参数的,而因为lambda演算作用于是lexical scope 的,variable capture 意味着语言要支持GC才能更方便的操作。 这意味着像Java(8以前), C/C++ 这两门工业界语言函数式编程并不非常适合.

2. 高阶类型推断

因为函数可以作为参数,其类型可以非常复杂 比如下面的函数类型其实非常普遍:

val callCC : (('a -> 'b -> 'c) -> ('a -> 'c) -> 'd) -> ('a -> 'c) -> 'd 

如果没有类型推断,其实很难写对或者理解它的语义

3. tail-call

因为函数式风格没有赋值,也就没有for循环, 要实现循环操作 只能通过递归调用, 比如下面简单的例子:

let rec even n = if n = 0 then true else if n = 1 then false else odd (n - 1)

and odd n = if n = 1 then true else if n = 0 then false else even (n - 1)

这需要编译器保证上面的例子不能有stackoverflow 能提供这样保证的编译器并不多,比如所谓的 "函数式" 语言scala 就不能提供这种保证 也就实际上不是函数式语言.

相比函数式风格我觉得更重要的一个语言特性的时代数数据类型和模式匹配

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 为什么说面向对象编程和函数式编程都有问题 ppplive软件哪里可以下载 手机糸统升级后手机上的联系人没有了怎么找回来 排骨炒什么比较好吃 手机系统更新联系人丢失怎么办 烧烤用的白料配方 烧烤酱料配方 和如何熬制 新房贷款的流程是什么? 贷款买房流程,贷款买房需要什么手续 申请贷款需要什么条件?新房申请商业贷款的流程是怎么样的? 买房贷款的流程是什么 需要准备哪些资料 vivo iqoo Z5和realme Q3 pro那个更好 Oppo手机充电时发热会不会爆炸啊? vivo的yq3的查看是不是新机,为什么显示1970年1日1号??? oppo手机充完电手机自己发热,会不会爆炸啊 OPPO手机会爆炸吗? oppor9 发烫会不会爆炸 2019 Q3季度5G手机市场份额报告:为何vivo实力占据一半多呢? oppor15为什么我的手机在看剧或者玩游戏什么的时候会突然上半部分发烫很烫,会不会炸? 买苹果11好还是买vivo i Q3好? 求Google play store里面的Liquid image Live这个APP软件安装包, 安卓机怎么下载jb live怎么下载 产品市场总需求函数yd的表达式式是什么 刘昊然毕业于哪个大学? Haskell 的 Typeclass 怎么理解 Windows Live照片库最新官方版免费下载 为什么说 JavaScript 不擅长函数式编程 如何评价Functional Programming in Scala 这本书 谁能告诉我一些关于使用电脑的小知识,越全面越好,拜托了! 吃东坡肉的读后感 如何利用Scala的for循环过滤掉None的值 衣服发霉了可以洗掉? 我的西装有好几处地方发白了。。。洗衣店可以洗掉么? vista与mac os x 系统对比 古代文人被贬后为题作文400字左右 梦见煮了满满一锅米饭,但是有很多苍蝇飞到锅里,有些飞到火里烧死了... 谁有400字以上作文多给我发点!!!(快快快)要精品!!! 东坡肉的介绍 食用菌中的百分之多少属于担子菌亚门? 上海伍游网络科技有限公司怎么样? 梦见有好多苍蝇拿了一瓶白开水浇上去全部烫死了求解梦