免费注册 查看新帖 |

Chinaunix

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

Perl6 新特性之元操作符之 reduce 操作符 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-02 11:48 |只看该作者 |倒序浏览
Perl6 引入了许多函数式编程的概念,
其中“元操作符(meta-operator)”应该是最有 FP  特色的。

什么是元操作符?
元操作符就是说,对一个运算符,进行某种变换,得到一个新的运算符,这个新的运算符和之前的运算符的参数形式、计算结果都不一样(可以说是面目全非)。

因为它是针对运算符的运算,因此称为元操作符符。

举个大家都熟悉的例子:
在很多语言里面,都支持 += 这样的运算符,比如在 Perl5 中:

$a += 2;     等同于       $a = $a + 2;

这里就好比是对加法运算进行了一次变换,变换出了 += 这个新的运算符。
类似的还有 -= *= 等等。

但是,大多数语言中,这样的运算符只有有限的几个,而且虽然它们被设计成了这个样子,
但这只是为了便于程序员记忆,本质上它们和别的运算符都是一样的,都是编译器实现的,不是程序员实现的。

Perl6 中就不同了,你可以随便搞个运算符,然后后面跟个等号,就可以变成一个新的运算符,举个例子:

> my $a = 0
0
> $a or= 2
2
>

以上例子在 Rakudo star 中运行通过,大家可以自行举一反三。

=========== 好,以上只是个小小的背景介绍,下面才是正文 ===========

下面介绍一个有些人以前可能没有听说过的操作,叫做 reduce 操作(学过 Python 的人可能了解过),
这个操作的含义是说,把一个列表,用一个运算符折叠起来,最简单的例子,比如:

1..100 这个列表,用加法运算折叠起来,结果就是 1+2+3+4.......+100

这个逻辑在不支持 reduce 的语言中,可以用循环来实现。
有些语言的 library 里面也提供这样的操作,比如 Perl5:

use List::Util qw(reduce);

my $sum = reduce { $a + $b } 1..100;      # 得到 5050

那么,Perl6 的 reduce 元操作符是什么样的呢?
还是看下面的例子吧:

> [+] 1..100
5050
>

没错,就是在运算符的外面加一层方括号,就变成了 reduce 运算。
而这个方括号就是 reduce 元运算符,非常好用,非常方便。

大家听明白了没有?

听明白了的人举一下手,没听明白的人重看一遍。

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
2 [报告]
发表于 2010-08-02 11:55 |只看该作者
听明白了

论坛徽章:
0
3 [报告]
发表于 2010-08-02 12:44 |只看该作者
明白了··好强大·

论坛徽章:
0
4 [报告]
发表于 2010-08-02 12:44 |只看该作者
希望flw老大··继续发一些关于perl6的好文章·

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
5 [报告]
发表于 2010-08-02 13:10 |只看该作者

论坛徽章:
18
巳蛇
日期:2014-12-03 08:27:5115-16赛季CBA联赛之吉林
日期:2016-04-18 15:24:24qiaoba
日期:2016-06-17 17:41:1615-16赛季CBA联赛之八一
日期:2016-06-20 15:13:1415-16赛季CBA联赛之广夏
日期:2016-06-29 10:38:28极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之吉林
日期:2017-03-06 13:47:55
6 [报告]
发表于 2010-08-02 17:20 |只看该作者

论坛徽章:
0
7 [报告]
发表于 2010-08-03 09:19 |只看该作者

论坛徽章:
0
8 [报告]
发表于 2010-08-03 20:36 |只看该作者
{:3_182:}

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
9 [报告]
发表于 2010-08-04 10:10 |只看该作者
刚发现 reduce 真是个好东西

论坛徽章:
0
10 [报告]
发表于 2010-08-04 17:05 |只看该作者
懂了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP