免费注册 查看新帖 |

Chinaunix

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

问关于函数式编程闭包的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-01 16:41 |只看该作者 |倒序浏览
闭包是高阶函数带来的功能,可是用闭包不是破坏了fp的无状态性了吗?这个问题大家是怎么理解的?

论坛徽章:
0
2 [报告]
发表于 2009-04-01 17:38 |只看该作者
一个闭包在自己的环境里绑定了若干变量。只要不赋值,仍然是无状态的。

论坛徽章:
0
3 [报告]
发表于 2009-05-21 20:48 |只看该作者
原帖由 Strange 于 2009-4-1 16:41 发表
闭包是高阶函数带来的功能,可是用闭包不是破坏了fp的无状态性了吗?这个问题大家是怎么理解的?



我的理解就是函数参数的部分绑定。

f(x, y) = x+y;
但现在我已经知道y=3,代入就变成:
f(x, y) = f(x, 3) = x + 3

即得到新函数 g(x) = x+3

论坛徽章:
0
4 [报告]
发表于 2009-05-21 22:56 |只看该作者
原帖由 lixuzhang 于 2009-5-21 20:48 发表



我的理解就是函数参数的部分绑定。

f(x, y) = x+y;
但现在我已经知道y=3,代入就变成:
f(x, y) = f(x, 3) = x + 3

即得到新函数 g(x) = x+3

Currying?

论坛徽章:
0
5 [报告]
发表于 2009-06-02 18:04 |只看该作者
个人觉得在支持匿名函数的非fp语言中闭包要更好玩些,"oo is poor man's closure"嘛。

个人把闭包理解成一种scope机制,在某函数体中定义的函数可以访问“父函数”中的变量,例如在haskell中where子句:
f x y = g 1
           where g a = x % y + a

currying实际上就是一组lambda的语法糖,
f x y = some_expression
就等价于 f = \x -> \y -> some_expression
也是闭包
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP