免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: donet8

一个匿名的lambda函数如何递归的调用自己? [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2012-05-29 17:02 |显示全部楼层
回复 9# AD8018

我觉得臆想得挺有模有样,挺和谐的。
确实是希望有这样的能力:将fib的作用域限制在那个lambda之内。

论坛徽章:
0
发表于 2012-05-29 17:18 |显示全部楼层
回复 11# OwnWaterloo


你是不是人话也不会说了?

什么叫
作用域限制在那个lambda之内


人话听懂,也不会说,看来你该改行了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-03-22 20:11 |显示全部楼层
c++1y 支持 auto 之后可以这么玩:
  1. int fac( int n )
  2. {
  3.     auto const& iter_n = []( int n, int a, auto iter_n_ ) -> int
  4.     {
  5.         if ( 0 == n ) return a;
  6.         return iter_n_( n-1, a*n, iter_n_ );
  7.     };

  8.     return iter_n( n, 1, iter_n );
  9. }

  10. #include <iostream>

  11. int main()
  12. {
  13.     std::cout << fac( 5 ) << "\n";
  14.     return 0;
  15. }
复制代码
将自己作为一个参数提供给自己

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-03-22 20:19 |显示全部楼层
OwnWaterloo 发表于 2012-05-28 18:28
普通的做法:函数表达式而非匿名函数。
既然是表达式,也就可以随处写,而不像函数语句那样必须写在特定位 ...

但C++11的lambda是匿名函数,不能这么玩……


现在可以将匿名的东东用 auto 塞进去了 :wink:

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-03-22 20:28 |显示全部楼层
发现有人是这么玩的:
http://coliru.stacked-crooked.co ... 602a6e5ca9f4b5b0039
写起来不别扭

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
发表于 2014-03-22 21:09 |显示全部楼层
一碟茴香豆

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-03-22 22:09 |显示全部楼层
cokeboL 发表于 2014-03-22 21:09
一碟茴香豆


我觉得 c++ 最大的魅力就是,可以随意搓圆揉扁捏弯撸直,只有想不到,没有做不到;要知道,就算是美眉的咪咪让你随便上手都很难玩出这么多花样的。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
发表于 2014-03-23 11:13 |显示全部楼层
回复 17# lost_templar


    自从用了lua,再也不想多用其他语言了。。。底层封装点接口就再不想写c++了,产品催得紧,c++太累人

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2014-03-23 18:45 |显示全部楼层
回复 14# lost_templar

用...塞进去不正是因为C++11的lambda是匿名的么?
对比前面Javascript和Clojure的例子,函数表达式可以有一个可选的名字,然后在函数的body里可以引用自己。没有将递归用的函数作为参数传入。

论坛徽章:
43
15-16赛季CBA联赛之四川
日期:2018-10-13 23:26:5015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:36程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2014-03-23 21:11 |显示全部楼层
回复 19# OwnWaterloo

额……lambda的定义不就是“匿名函数”么?有名字就不是lambda了…………

话说回来,莫非你不能这么写么?

  1. std::function<void()> f=[&f](){ f(); };
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP