in reply to Perl6 Contest #2: P6 That Doesn't Look Like P5
Here is my attempt:sub ret_iter4 { my @ranges = @_; my $last=1; $last *= @$_ for @ranges; my $iteration=0; return sub { return if $iteration >= $last; my $i = $iteration++; my $possibilities = $last; map { $possibilities /= @$_; my $this_iter_i = $i / $possibilities; $i %= $possibilities; $_->[$this_iter_i]; } @ranges; } }
sub ret_iter4 (@loops is copy) returns Ref { my $last = [*] @loops.map:{ $_.elems }; my $iter = -1; return sub { my $i = ++$iter; return () if $iter >= $last; my $possible = $last; return @loops.map:{ $possible /= $_.elems; my $this_iter_i = $i / $possible; $i %= $possible; $_[$this_iter_i]; }; }; }
Cheers - L~R
|
---|