Wait the light to fall

数列

焉知非鱼

斐波那契数列(Fibonacci sequence)

lazy my \sequence = 1, 1, {$^a + $^b } ... *;
say sequence.raku;        # 1, 1, 2, 3, 5...
say [+] sequence[0..^10]; # 143

等差数列(arithmetic sequence)

通项为 n #

lazy my \sequence = 1, 2, 3 ... *;
say sequence.raku;        # 1, 2, 3, 4, 5...
say [+] sequence[0..^10]; # 55

通项为 2n #

lazy my \sequence = 2, 4, 6 ... *;
say sequence.raku;        # 2, 4, 6, 8, 10
say [+] sequence[0..^10]; # 110

通项为 2n - 1 #

lazy my \sequence = 1, 3, 5 ... *;
say sequence.raku;        # 1, 3, 5, 7, 9...
say [+] sequence[0..^10]; # 100

等比数列

通项为 2ⁿ⁻¹ #

my \sequence := 1, 2, 4 ... *;
say sequence.raku;        # 1, 2, 4, 8, 16...
say [+] sequence[0..^10]; # 1023

或:

my \sequence := { state $n = 1; 2 ** ($n++ -1) } ... *;
say sequence.raku;        # 1, 2, 4, 8, 16...
say [+] sequence[0..^10]; # 1023

通项为 -1ⁿ #

lazy my \sequence = -1,1,-1 ... *;
say sequence.raku;        # -1, 1, -1, 1, -1...
say [+] sequence[0..^10]; # 0

通项为 -1ⁿ⁺¹ #

lazy my \sequence = 1,-1,1 ... *;
say sequence.raku;        # 1, -1, 1, -1, 1...
say [+] sequence[0..^10]; # 0

指数数列

通项为 10ⁿ - 1 #

my \sequence := 9, 99, -> $a { ($a ~ '9').Int } ... *;
say $sequence.raku;       # 9, 99, 999, 9999, 99999...
say [+] sequence[0..^10]; # 11111111100

或:

my \sequence := {state $n = 1; (10 ** $n++) -1 } ...  *;
say $sequence.raku;       # 9, 99, 999, 9999, 99999...
say [+] sequence[0..^10]; # 11111111100

通项为 (10ⁿ - 1)/9 #

my \sequence := {state $n = 1; (10 ** $n++ - 1) div 9 } ...  *;
say sequence.raku;        # 1, 11, 111, 1111, 11111...
say [+] sequence[0..^10]; # 1234567900

通项为 n² #

my $seq := 1,2,3 ... *;
my $sequence := $seq Z* $seq;
say $sequence.raku;       # 1, 4, 9, 16, 25...
say [+] sequence[0..^10]; # 385

my \sequence := { state $n = 1; $n++ ** 2 } ... *;
say sequence.raku;        # 1, 4, 9, 16, 25...
say [+] sequence[0..^10]; # 385

其它

通项为 cos(n-1)π/2 #

my \sequence := { state $n = 0; $n += 1; (cos ($n - 1)*pi/2).Int } ... *;
say sequence.raku;        # 1, 0, -1, 0, 1, 0, -1, 0...
say [+] sequence[0..^10]; # 1

通项为 n(n+1) #

my \sequence := { state $n = 0; $n += 1; $n * ($n+ 1) } ... *;
say sequence.raku;        # 2, 6, 12, 20, 30
say [+] sequence[0..^10]; # 440

通项为 1/n #

my \sequence := {state $n = 0; $n++; Rat.new(1, $n) } ... *;
say \sequence.raku;       # 1.0, 0.5, <1/3>, 0.25, 0.2, <1/6>, <1/7>...
say [+] sequence[0..^10]; # 2.928968

通项为 n! #

sub postfix:<!>($n where $n > 0) {
    [*] 1..$n
}

my \sequence := { state $n = 0; $n++; $n! } ... *;
say sequence.raku;        # 1, 2, 6, 24, 120...
say [+] sequence[0..^10]; # 4037913