That's the same thing as:
$iter_prod = NestedLoops([ sub { iter(qw(a b c) }, sub { iter(qw(x y z) }, ]);
Wasn't the whole point to avoid flattening the iterator and to provide arbitrary nesting? Your solution flattens, and the depth is hardcoded as a sequence of calls to iter_prod.
Note: NestedLoops's iterator returns an array rather than an array ref.
Update: Your solution does support arbitrary depth:
my $iter = do { my $done = 0; sub { $done++ ? undef : 1 } }; iter_prod($iter, ...) if ...; iter_prod($iter, ...) if ...;
With NestedLoops, you'd do:
my @iters; push(@iters, ...) if ...; push(@iters, ...) if ...;
In reply to Re^2: NestedLoops (Algorithm::Loops) and Iterators
by ikegami
in thread NestedLoops (Algorithm::Loops) and Iterators
by mrborisguy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |