私は(どのように作るのですか?)関数(モジュール?)を探しています
my $scalar = 16;
return function ($scalar);
与える
@return = ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 );
つまり、1 から $scalar までのゼロ以外の整数を返します。
$scalar が大きな数であると想定しても問題ありませんが、超最適解を特に探しているわけではありません。
私は(どのように作るのですか?)関数(モジュール?)を探しています
my $scalar = 16;
return function ($scalar);
与える
@return = ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 );
つまり、1 から $scalar までのゼロ以外の整数を返します。
$scalar が大きな数であると想定しても問題ありませんが、超最適解を特に探しているわけではありません。
範囲演算子 は、..必要なものと正確に一致するリストを返します。
1 から までのリストを作成するに$xは、構文は次のとおりです。1 .. $x
それを配列変数に割り当てるには、@array = 1 .. $x;
[1..16]
配列参照を作成します
1..16リストを作成します。
このソースを試す
use Data::Dumper;
$c = [1..16];
@d = 1..16;
print Dumper $c;
print Dumper \@d;
1との間のすべての整数が必要な場合はどうなります1_000_000_000か? コンピューターに十分なメモリがある場合でも、それほど大きな配列を作成したくないでしょう。
#!/usr/bin/env perl
use strict;
use warnings;
sub make_lazy_increasing_sequence {
my ($current, $end) = map int, @_;
return sub {
return if $current > $end;
return $current++;
}
}
my $from_1_to_5 = make_lazy_increasing_sequence(1, 5);
my @others;
while (defined(my $i = $from_1_to_5->())) {
push @others, make_lazy_increasing_sequence($i, 10_000);
}
for (1 .. 10) { # perl makes sure this range is lazy
print join(',', map $_->(), @others), "\n";
}
print $others[-1]->(), "\n";
出力:
1,2,3,4,5 2,3,4,5,6 3,4,5,6,7 4,5,6,7,8 5,6,7,8,9 6,7,8,9,10 7,8,9,10,11 8,9,10,11,12 9,10,11,12,13 10,11,12,13,14 15