+ -
当前位置:首页 → 问答吧 → Perl6 新特性之元操作符之 reduce 操作符

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 元运算符,非常好用,非常方便。

大家听明白了没有?

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

作者: flw   发布时间: 2010-08-02

听明白了

作者: yybmsrs   发布时间: 2010-08-02

明白了··好强大·

作者: wfnh   发布时间: 2010-08-02

希望flw老大··继续发一些关于perl6的好文章·

作者: wfnh   发布时间: 2010-08-02

作者: ynchnluiti   发布时间: 2010-08-02