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