Perl6 新特性之元操作符之 reduce 操作符
时间:2010-08-02
来源:互联网
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 元运算符,非常好用,非常方便。
大家听明白了没有?
听明白了的人举一下手,没听明白的人重看一遍。
其中“元操作符(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 元运算符,非常好用,非常方便。
大家听明白了没有?
听明白了的人举一下手,没听明白的人重看一遍。
作者: flw 发布时间: 2010-08-02

作者: yybmsrs 发布时间: 2010-08-02
明白了··好强大·
作者: wfnh 发布时间: 2010-08-02
希望flw老大··继续发一些关于perl6的好文章·
作者: wfnh 发布时间: 2010-08-02

作者: ynchnluiti 发布时间: 2010-08-02
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28