perl6 series 操作符 原创

perl6 series 操作符 原创

这几天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版本实现它,大家就过过干瘾吧!;)
不错!
larry太有才了
series操作符啥时候能引入perl中阿
嗯,很有用的一个 operator


QUOTE:
原帖由 MMMIX 于 2008-10-16 20:30 发表
嗯,很有用的一个 operator

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



QUOTE:
原帖由 flw 于 2008-10-16 22:05 发表

在 Haskell 里面实现难不难?

简单的数列,例如等差数列,可以用 arithmetic sequence 实现,复杂点的可以用 list comprehension 或者递归生成的数据结构。

QUOTE:
我觉得倒也不难,右操作数可以用 lambda 表达式,
只是这参数个数,就不好确定了。

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


无穷序列,会吓死人的


QUOTE:
原帖由 dream_one 于 2008-10-17 11:00 发表
过过干瘾~~


无穷序列,会吓死人的

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


QUOTE:
原帖由 dream_one 于 2008-10-17 11:00 发表

无穷序列,会吓死人的

在支持 lazy evaluation 的语言中,例如 Haskell,潜在无穷的数据结构是很常见也很方便的。