泛函编程(0)-什么是泛函编程

 什么是泛函编程(Functional Programming)?泛函编程就是用函数编写程序。这个回答太抽象,等于没说。

再说清楚一点:泛函编程就想砌积木一样把函数当成积木块,把函数的输出输入作为积木的楔子和楔孔,把一个函数的输出当作另一个函数的输入组合成一个更大的函数。整个砌积木的过程就是泛函编程。嗯,这个稍微清楚了一点,不过这样做来干什么呢?相对于泛函编程模式还有指令编程模式(Imperative Programming)。我们熟悉的OOP编程就是指令编程模式。在指令编程中我们按顺序用一条条指令改变程序中的一些变量来实现整个程序状态转变。而在泛函编程中我们首先按照程序要求把一些特定的函数用特定的方式组合起来形成另一个独立的大函数;然后把一些东西输入到这个大函数的输入口;当输入物经过那条由内部组件函数输入输出形成的曲折通道到达输出口时就产生了需要的结果(很像输入物件的变形过程)。输入物每经过一个组件函数,程序的状态就会发生一些转变,整个过程实际上就是程序的状态变形(Program State Transformation)。那么,可不可以说指令编程就对应变量赋值,泛函编程相当于函数组合呢?实际上“函数组合”这个词是泛函编程的灵魂,英文是Functional Composition。这么说是不是又清楚了一点了?不过对于我们这些用了一辈子OOP编程的人来说,相对于用一条指令设定一个变量直接看到结果来说,泛函编程实现状态转变的方式是那么的奇妙又不可琢磨。不用担心,改变观念是需要过程的。要知道泛函编程是一个全新的编程范畴。

    如果泛函编程就是组合函数,那这可是一种全新的编程方式。如何实现函数的组合呢?泛函编程是以数学理论(⋋-culculus)为基础的,程序函数的组合是通过数学函数组合定律来实现的。嗯,的确是一套全新的概念,那就让我们从头学起吧。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

P1774 最接近神的人_NOI导刊2010提高(02)

题目描述 破解了符文之语,小FF开启了通往地下的道路。当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案。而石门上方用古代文写着“...

2666
来自专栏zaking's

js算法初窥06(算法模式03-函数式编程)

1163
来自专栏小樱的经验随笔

Vijos P1785 同学排序【模拟】

同学排序 描述 现有m位同学,第1位同学为1号,第2位同学为2号,依次第m位同学为m号。要求双号的学生站出来,然后余下的重新组合,组合完后,再次让双号的学生站出...

2584
来自专栏数据结构与算法

1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛

1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond...

44310
来自专栏雪胖纸的玩蛇日常

4. 高等数学——元素和极限

  假设我们知道了整数的定义,像-3,1,17这些都属于整数Z。然后有理数则是两个整数相除q/p ,q,p属于Z,则是有理数Q。

852
来自专栏zaking's

js算法初窥03(搜索及去重算法)

1172
来自专栏数据结构与算法

P2375 动物园

题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决...

2746
来自专栏好好学java的技术栈

“365算法每日学计划”:java语言基础题目及解答(01-05打卡)

如果有小伙伴很少接触到这种题目的话,可能会觉得有点陌生,不知道从何下手,可能一开始我们能想到“最笨”的方法,但是也觉得挺有“娱乐性”的方法。

1495
来自专栏owent

不知道是哪一年的腾讯马拉松题目 照片评级 解题报告

结果就一不小心看到了这个充满回忆的ACM模式竞赛,还有咱腾讯的,就忍不住看了一下。

541
来自专栏斑斓

作为Scala语法糖的设计模式

Scala算是一门博采众家之长的语言,兼具OO与FP的特性,若使用恰当,可以更好地将OO与FP的各自优势发挥到极致;然而问题也随之而来,倘若过分地夸大OO特性,...

3345

扫码关注云+社区