免费注册 查看新帖 |

Chinaunix

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

perl6 series 操作符 原创 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-16 19:06 |只看该作者 |倒序浏览
这几天Larry引入了一个新的list操作符,我觉得比较有趣。所以今天来讲讲:

要介绍的操作符名叫series,写起来也很简单:  ...  #三个小圆点

恩,没错!和perl5的 ..很像嘛。(实际上,在perl6中, 1..10也还是可以用的,不过分的细了点,还多了ff操作符。以后有时间一起讲。)

样子像,在功能上也是很像的,只是功能上更强大:


1 ... {$_ + 1};       # 1,2,3,4............
1,1 ... {$a + $b}                   # 1,1,2,3...........  fib

从上面的简单例子可以看出,所谓series操作符,就是用一个function做一个iterator, 所以我们还可以有更多更有想象力的操作:


() ... &rand                         # 随机序列
1 ... {-$_}                          # 1, -1, 1, -1............
False ... &prefix:<!>           # False, True, False...

当然, 可以通过if语句,来限制iterator:
  1 ... { $_ + 1   if $_ < 10 }        #1..10
     ... { $_ + 10  if $_ < 100 }      # 10,20,30......90
      ... { $_ + 100 if $_ < 1000 }  # 100, 200......900
1 ... {$_ + 1 if @_ <10}             # 也可以, 不过性能有损失

按照spec规定,简单的数学,几何级数,可以自动判断出来:

1, 3, 5 ... *                # 奇数序列
1, 2, 4 ... *                # power 2  序列

好了, 基本的介绍就是这么多,大家可以多想想用法,然后看看有什么漏洞。这个操作符是Larry前几天弄得,所以现在还没有什么perl6版本实现它,大家就过过干瘾吧!;)

评分

参与人数 1可用积分 +10 收起 理由
flw + 10 好久没看到这样的好帖子了。

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2008-10-16 20:14 |只看该作者
不错!
larry太有才了
series操作符啥时候能引入perl中阿

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2008-10-16 20:30 |只看该作者
嗯,很有用的一个 operator

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2008-10-16 22:05 |只看该作者
原帖由 MMMIX 于 2008-10-16 20:30 发表
嗯,很有用的一个 operator

在 Haskell 里面实现难不难?
我觉得倒也不难,右操作数可以用 lambda 表达式,
只是这参数个数,就不好确定了。

论坛徽章:
0
5 [报告]
发表于 2008-10-16 22:36 |只看该作者
perl5 里面 ... 也是合法的  用法就差太多了

[ 本帖最后由 hitsubunnu 于 2008-10-16 22:54 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2008-10-16 23:34 |只看该作者
原帖由 flw 于 2008-10-16 22:05 发表

在 Haskell 里面实现难不难?

简单的数列,例如等差数列,可以用 arithmetic sequence 实现,复杂点的可以用 list comprehension 或者递归生成的数据结构。
我觉得倒也不难,右操作数可以用 lambda 表达式,
只是这参数个数,就不好确定了。

嗯,主要的问题就在这了。就我的理解,这里的 series 实际上是一个类似 map 的东西,不过它可以一次绑定多个变量。Haskell 的静态强类型系统使得变长参数根本无法实现(就我现在了解的来说)。

论坛徽章:
0
7 [报告]
发表于 2008-10-17 11:00 |只看该作者
过过干瘾~~


无穷序列,会吓死人的

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2008-10-17 11:22 |只看该作者
原帖由 dream_one 于 2008-10-17 11:00 发表
过过干瘾~~


无穷序列,会吓死人的

呵呵,突破一下思维模式吧。
没有什么不可以的。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2008-10-17 14:22 |只看该作者
原帖由 dream_one 于 2008-10-17 11:00 发表

无穷序列,会吓死人的

在支持 lazy evaluation 的语言中,例如 Haskell,潜在无穷的数据结构是很常见也很方便的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP