免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 10406 | 回复: 20
打印 上一主题 下一主题

我对高阶函数的理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-16 14:47 |只看该作者 |倒序浏览
举个例子:假设存在存款、取款和转账3种银行业务,每一种都需要认证和事务控制,可以尝试去抽象一个“银行业务”的框架,认证和事务控制在框架内进行,然后在框架上附加具体的业务逻辑。

  1. (define (银行业务 业务逻辑)
  2.   (lambda ( . args)
  3.     (if (not (认证))
  4.         '认证失败
  5.         (begin
  6.           (开始事务)
  7.           (let ((return (apply 业务逻辑 args)))
  8.             (结束事务)
  9.             return)))))

  10. (define 存款 (银行业务 (lambda (账户 金额) (存款业务逻辑))))
  11. (define 取款 (银行业务 (lambda (账户 金额) (取款业务逻辑))))
  12. (define 转账 (银行业务 (lambda (账户甲 账户乙 金额) (转账业务逻辑))))

  13. (存款 账户甲 3000)
  14. (取款 账户甲 200)
  15. (转账 账户甲 账户乙 1000)
复制代码

[ 本帖最后由 x2 于 2009-2-17 15:02 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-16 17:05 |只看该作者
高价函数,奢侈品。高端的,用不起。

论坛徽章:
0
3 [报告]
发表于 2009-02-16 19:06 |只看该作者
高价函数提供了一种避免写重复代码的方法。

这句话不是用来说明“高价”的, 只是用来说明“函数”的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2009-02-17 10:26 |只看该作者
貌似正确的拼写应该是【高函数】而不是【高函数】?

论坛徽章:
0
5 [报告]
发表于 2009-02-17 14:53 |只看该作者
原帖由 flw 于 2009-2-17 10:26 发表
貌似正确的拼写应该是【高阶函数】而不是【高价函数】?

晕,太大意

[ 本帖最后由 x2 于 2009-2-17 15:07 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-02-17 15:03 |只看该作者
原帖由 chenzengjie 于 2009-2-16 19:06 发表
高价函数提供了一种避免写重复代码的方法。

这句话不是用来说明“高价”的, 只是用来说明“函数”的。

本人的表达能力实在有限。

论坛徽章:
0
7 [报告]
发表于 2009-02-17 17:16 |只看该作者

回复 #6 x2 的帖子

避免写重复代码是一般函数的性质, 相信在很多入门的编程书里都有这样的介诏; 高阶函数也是函数, 当然也有这样的性质.

高阶函数这所以"高阶", 在于它能把函数当数据, 接受函数作参数, 返回函数作结果. 例如: 某高阶函数, 接受参数f(x), 计算其导函数f'(x)并作结果返回.

论坛徽章:
0
8 [报告]
发表于 2009-02-19 09:32 |只看该作者
其实我是想从Design Pattern中的Template Pattern的角度来理解高阶函数,这也是为什么不举偏向学术性的例子的原因。

论坛徽章:
0
9 [报告]
发表于 2009-03-04 14:29 |只看该作者
主要还是函数本身

论坛徽章:
0
10 [报告]
发表于 2009-03-13 12:29 |只看该作者
高阶函数不就是函数的函数吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP