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

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

Z3Py在CTF逆向中的运用

Z3是Microsoft Research开发的高性能定理证明器。Z3拥有者非常广泛的应用场景:软件/硬件验证和测试,约束求解,混合系统分析,安全性研究,生物学...

882
来自专栏前端儿

鸡兔同笼

已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”(不要引号)。

801
来自专栏阿凯的Excel

Series的小小运算(Pandas读书笔记4)

今天和大家分享几个简单的Series运算,后期掌握DataFrame后会进一步深入分享。 一、Series的筛选 ? 如果想把Series中符合某些条件的值列出...

2704

预测模型的计算时间

在周二我给精算师上的5小时机器学习速成课结束时,皮埃尔问了我一个有趣问题,是关于不同技术的计算时间的。我一直在介绍各种算法的思想,却忘了提及计算时间。我想在数据...

2617
来自专栏贾志刚-OpenCV学堂

TensorFlow中的feed与fetch

TensorFlow中的feed与fetch 一:占位符(placeholder)与feed 当我们构建一个模型的时候,有时候我们需要在运行时候输入一些初始数...

4147
来自专栏Spark学习技巧

第2篇:数据库关系建模

第二篇:数据库关系建模 前言 ER建模环节完成后,需求就被描述成了ER图。之后,便可根据这个ER图设计相应的关系表了。 但从ER图到具体关系表的建立还需要经过两...

3076
来自专栏用户2442861的专栏

一致性hash算法 - consistent hashing

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 ...

721
来自专栏数值分析与有限元编程

有限元 | 梁单元有限元程序算例

之前发过一个梁单元有限元分析程序。在好友测试时发现一个问题,就是程序中的real型变量默认为kind=4,我们姑且称为单精度型。这样限制了程序的使用,在一些问题...

2778
来自专栏苦逼的码农

循序渐进带你学习时间复杂度和空间复杂度。

写了这么久的算法文章,可以说凡是算法的文章都会涉及到时间复杂度和空间复杂度,可能有些读者对时间复杂度和空间复杂度还有点迷糊,今天特地找了一篇关于时间复杂度和空间...

734
来自专栏北京马哥教育

Numpy 隐含的四大陷阱,千万别掉进去了!

看起来效果不错。假设我们要对数据进行筛选,取第 1 列的第 1 行和第 3 行数据构成一个 2 x 1 的列向量。先看对 array 的做法:

1021

扫码关注云+社区