与Perl 6序列相乘无论(...)运算符

时间:2011-10-21 17:29:48

标签: perl perl6

我已经看到了序列中Perl 6无论(...)运算符的例子,我试图找出如何进行涉及乘法的序列。

操作员执行以下操作,如果以某些数字开头,则可以指定其后的数字序列。

@natural = 1,2 ... *;
@powersOfTwo = 1,2,4 ... *;

等等。 也可以使用序列中的先前数字定义序列,如斐波那契数字(在此question中所示),其中一个执行以下操作:

@fibonacci = 1,1, *+* ... *;

问题是乘法运算符为*,之前的数字也用*表示。

虽然我可以使用+-/来定义序列,但我似乎找不到使用*定义序列的方法。

我尝试了以下内容:

@powers = 1,2, *** ... *;

但它显然不起作用。

有谁知道怎么做?

2 个答案:

答案 0 :(得分:13)

首先,Perl 6对空白很敏感。

1, 2, * * * ... *

完全合法,并产生一个类似于乘法斐波那契的序列;它只是有点难以阅读。 **** * *意味着不同的东西。

如果歧义困扰你,你可以使用一个显式的块而不是使用“任何星形”给你的隐式块:

1, 2, -> $a, $b { $a * $b } ... *

1, 2, { $^a * $^b } ... *

都产生与1, 2, * * * ... *相同的序列(在Rakudo中测试)。

答案 1 :(得分:2)

my @powers_of_two := { 1, 2, { $^a * 2 } ... *);

my $n = 6;
my @powers_of_six := { 1, $n, { $^a * $n } ... *);