数列
— 焉知非鱼斐波那契数列(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