22.4.1.1 函数是第一型
这句话本身该如何理解?什么才是真正的“第一型”?我们看下面的数学概念:
二元方程式 F(x, y) = 0,x, y 是变量, 把它写成 y = f(x), x是参数,y是返回值,f是由x到y的映射关系,被称为函数。如果又有,G(x, y, z) = 0,或者记为 z = g(x, y),g是x、y到z 的映射关系,也是函数。如果g的参数x, y又满足前面的关系y = f(x), 那么得到z = g(x, y) = g(x, f(x)),这里有两重含义,一是f(x)是x 上的函数,又是函数g的参数,二是g是一个比f更高阶的函数。
这样我们就用z = g(x, f(x)) 来表示方程F(x, y) = 0和G(x, y, z) = 0的关联解,它是一个迭代的函数。我们也可以用另一种形式来表示g,记z = g(x, y, f),这样我们将函数g一般化为一个高阶函数。同前面相比,后面这种表示方式的好处是,它是一种更加泛化的模型,例如T(x,y) = 0 和G(x,y,z) = 0 的关联解,我们也可以用同样的形式来表示(只要令f=t)。在这种支持把问题的解转换成高阶函数迭代的语言体系中,函数就被称为“第一型”。
JavaScript中的函数显然是“第一型”。下面就是一个典型的例子:
Array.prototype.each = function(closure) |
这真是段神奇的魔法代码,它充分发挥了函数式的魅力,在整个代码中只有函数(function)和符号(Symbol)。它形式简洁并且威力无穷。
[1,2,3,4].each(function(x){return x * 2})得到[2,4,6,8],而[1,2,3,4].each(function(x){return x-1})得到[0,1,2,3]。
函数式和面向对象的本质都是“道法自然”。如果说,面向对象是一种真实世界的模拟的话,那么函数式就是数学世界的模拟,从某种意义上说,它的抽象程度比面向对象更高,因为数学系统本来就具有自然界所无法比拟的抽象性。
| 回书目 上一节 下一节 |
| 关于 JavaScript Java 函数 闭包 王者归来 JavaScript王者归来 的 |
|
· 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. · 08年5月各大网上书店及.. · 2008年5月24日软考试题.. |
· 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. · 系统分析师自测获奖名.. · Linux结课考试自测获奖.. |
|
||||
| · Windows Server 2008专.. · 隐私保护技术探讨 · 绿色IT人健康生存手册 · 网络工程师职业规划与.. · 杀毒软件评测专题 · 访问控制列表(ACL)介绍 · Vista SP1对决XP SP3 · 华为员工自杀频频拷问.. |
· 2008中国互联网大会 · 微软出价446亿美元收购.. · 勇闯IT培训黑色围城 · CISSP认证成长之路 · 解析35岁技术人的价值.. · LAMP技术精解 · AMD Phenom三核处理器.. · 充电计划之热门IT认证.. |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 · 国际文档格式标准开战 · 路由器设置与口令恢复 |
· PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. · 访问控制列表(ACL)介绍 · 反垃圾邮件技术应用 · ASP.NET 2.0基础开发指.. |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · 三层交换技术专题 · Apache技术专题 · 企业数据恢复指南 · 路由器设置与口令恢复 |
· SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · PHP开发应用手册 · 专题:AIX操作系统管理.. · 交换机故障解决指南 · 三层交换技术专题 |
|||