与Perl 6序列相乘的任何(…)运算符

问题描述 投票:7回答:2

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

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

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

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

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

问题是乘法运算符是*,并且先前的数字也用*表示。

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

我尝试了以下操作:

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

但是它显然不起作用。

有人知道怎么做吗?

perl perl6 raku
2个回答
14
投票

一方面,Perl 6对空格敏感。

1, 2, * * * ... *

是完全合法的,并生成类似于乘法斐波那契的序列;有点难读。 **** * *的含义有所不同。

如果歧义困扰您,您可以使用显式块,而不是使用“任何星星”为您提供的隐性块:

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

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

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


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

my $n = 6;
my @powers_of_six := { 1, $n, { $^a * $n } ... *);
© www.soinside.com 2019 - 2024. All rights reserved.