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

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

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

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

时间: 2024-10-12 19:54:16

泛函编程(0)-什么是泛函编程的相关文章

《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记

REF设备 参考光栅设备,他能以软件计算方式完全支持Direct3D Api.借助Ref设备,可以在代码中使用那些不为当前硬件所支持的特性,并对这此特性进行测试. D3DDEVTYPE 在程序代码中,HAL设备用值D3DDEVTYPE_HAL来表示.该值是一个枚举变量.REF设备用D3DDEVTYPE_REF来表示.这种类型非常重要,你需要铭记,因为在创建设备的时候,我们必须指定使用哪种设备类型. COM(组件对象模型) 创建COM接口时不可以使用c++关键字new.此外使用完接口,应调用Rel

饥荒MOD lua编程0基础入门

前言 原贴写于饥荒游戏贴吧,为了使文章针对性更强,将原文切割并精简.此贴主要为编程0基础的modder讲解一些编程的基础知识.至于说有关饥荒框架的介绍,则会放在另一篇文章里讲解. 编程0基础的人,要想学习制作MOD,难度是比较大的,因为缺乏一些基本的编程概念,只懂得复制别人的代码或者在它们的基础上稍加改变,遇到稍微复杂一点的代码,就束手无策了.对于MOD崩溃或错误,也几乎没办法自行处理.但我也不推荐先去学一门编程语言之后再来学习MOD代码,这是没有必要的.事实上饥荒MOD里用到的基本编程知识都比

【c语言】有一函数:x < 0 ,y = -1;x = 0,y = 0;x > 0,y = 1,编程输入一个x值,要求输出对应的y

// 有一函数:x < 0 ,y = -1;x = 0,y = 0;x > 0,y = 1,编程输入一个x值,要求输出对应的y #include <stdio.h> int main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x > 0) y = 1; else if(x < 0) y = -1; else y = 0; printf("对应的y值是:%d\

微软C#6.0语言OOP面向对象编程》《微软ASP.NET\MVC56网站开发》《微软Web服务\WCF\Web API3.0课程视频》

最新<微软C#6.0语言OOP面向对象编程><微软ASP.NET\MVC56网站开发><微软Web服务\WCF\Web API3.0课程视频>下载 下载链接:http://pan.baidu.com/s/1bnjJQnd 密码:36ji 微软与开源实战训练营QQ群:  203822816微软MSDN俱乐部QQ群:  29754721,

.NET 4.0 任务和并行编程系列

8天玩转并行开发 8天玩转并行开发——第一天 Parallel的使用 8天玩转并行开发——第二天 Task的使用 8天玩转并行开发——第三天 plinq的使用 8天玩转并行开发——第四天 同步机制(上) 8天玩转并行开发——第五天 同步机制(下) 8天玩转并行开发——第六天 异步编程模型 8天玩转并行开发——第七天 简要分析任务与线程池 8天玩转并行开发——第八天 用VS性能向导解剖你的程序 并行编程系列 .NET 4 并行(多核)编程系列之一入门介绍 .NET 4 并行(多核)编程系列之二 从

socket编程之三:socket网络编程中的常用函数

这节本来打算先给出常用函数介绍,再给两个代码实例,写着写着发现越来越长,决定把代码放在下一节. 本节内容持续更新...... 1 socket()函数 原型: int socket(int domain, int type, int protocol); 描述: 类似打开一个文件,返回一个socket描述符,唯一标识一个socket,后面相应的操作都是这用这个socket描述符. 参数: domain:协议族,常用的协议族有AF_INET.AF_INET6.AF_LOCAL.AF_ROUTE等:

JAVA编程“性能说”(java编程需要做的26件事)

转载于 http://www.csdn.net/article/2012-06-01/2806249 最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控

编程技巧之表格驱动编程

/* Image format-dependent operations. */ typedef struct { jas_image_t *(*decode)(jas_stream_t *in, char *opts); /* Decode image data from a stream. */ int (*encode)(jas_image_t *image, jas_stream_t *out, char *opts); /* Encode image data to a stream.

JAVA笔记26-网络编程(不等于网站编程)

一.网络基础(TCP/IP详解) 1.IP协议(Internet Protocol):网络层,支持网间数据报通信.无连接数据报传送,数据报路由选择和差错控制. IPv4 32位(4字节),IPv6 128位(16字节).P ping ICMP协议 2.TCP协议.UDP协议 (1)TCP(transmission control protocol 打电话):专门设计用于在不可靠的因特网上提供可靠的.端到端的字节流通信的协议.它是一种面向连接的协议.有三次握手.慢 (2)UDP(user data

嵌入式 Linux网络编程(三)——UDP编程模型

嵌入式 Linux网络编程(三)--UDP编程模型 UDP编程模型: UDP循环服务器模型为: socket(...); bind(...); while(1) {    recvfrom(...);    process(...);    sendto(...); } server.c代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #inc