Perl6: DWIM(空気を読んでくれるよう)にlazy listを作ってくれるSequence Operators

http://perl6advent.wordpress.com/2010/12/04/the-sequence-operator/

Perl6はHaskelの影響からだろうか、実例から無限の数列を作れるらしい。
my @even_numbers:=0, 2, ... *;
my @odd_numbers:=1, 3, ... *;
@even_numbersはpythonで言うと偶数を延々と出すgeneratorになるんだろう。元記事の例ではreplに打ち込んでいるので、行の後の;1をつけて、expressionがその場で評価されないようにしている。そうしないと、無限ループに入ってしまうから。

中身を見るときはスライスする:
> @even_numbers[^10]
0 2 4 6 8 10 12 14 16 18
[^10]はPythonだと[:10]のようだ。

奇数や偶数は最初の二つの値から空気を読んでlazyリストを生成している。独自のフォーミュラの数列を作ることも可能だ:
my @Fibonacci := 0, 1, -> $a, $b { $a + $b } ... *;
(これをこのままreplに入れると無限ループに入るので、その際は;1を尾につける)。 ->で関数を定義するところもHaskelの影響か。

これ以降の例はわからない:
my @Fibonacci := 0, 1, * + * ... *;
これはなんとなくわかるな。
@Fibonacci ...^ * > 10000
何?

興味のある方は元記事の例に目を通してみてください。

どういう風に役立つのかすぐイメージがわかないが、他の汎用スクリプト言語に無い力を秘めているのは確かのようだ。最近のrakudoをインストールしてみるか。