到底什么是函数式编程思维

 我来答
晰美酒窝
推荐于2016-08-04 · TA获得超过6731个赞
知道大有可为答主
回答量:4544
采纳率:27%
帮助的人:1488万
展开全部
形而上的思维:
1、数据不可变的思维:let a = 100,意义不是把100赋值给变量a,而是把a符号绑定(或者叫匹配)到100。
2、一切皆表达式思维:if b then 100 else 10,这不是条件跳转,而是一个三元表达式。
3、函数是第一类值:函数可以作为参数传输,也可以作为结果返回,更可以由一个函数演化成另一个函数。

形而下的思维:
1、用递归替换循环。
2、难以尾递归的时候考虑使用延续函数(continuation)。
3、高阶函数、部分应用、Lambda演算。
4、用泛型、接口、可区别联合类型替换类继承。
5、用二叉树替换普通链表后可以支持高并发计算。
===================================================

这些也只是feature而不是思维。我想知道的是这些feature之后的逻辑。
-----------------------------------------------------------------------------------------------------
再往上说就不接地气了,先从函数式语言说起,函数式语言其实就是模仿人的数学思维而发明的朴素,后来因为离机器太远,不容易优化而被诟病。但科技发展到今天,编译器的优化能力已经很强,软件系统越来越复杂,人的分工越来越细,函数式语言离数学更近,离机器更远,反而成为一种优势,有助于人把问题清晰化。从这个层面看,函数式编程是一种什么思维,就是推离机器的数学思维。这里没有内存、寄存器的想法,在 a=1之后,a 就不可能再等于2,当然你可以在 let a = 1 之后,再 let a = 2,但是这个a 就已经不是那个a,在停留在有内存概念的编程世界里,a 一直是 a,它是装东西的桶或者盒子,只是每次里面装的东西不同。

那么,总的来说,是先有朴素的函数式语言,然后才有今天发现函数式编程的好处, 启用了函数式语言的某些 feature,目的是为了把问题解构成更小的粒度。所以这些feature背后没什么逻辑,就好像问这石头为什么长这样一样。我只能打句偈语:本来就这样。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式