yitzle schreef: > In a personal email conversation, he realized what he was actually > looking for is the power set. > List::PowerSet > http://search.cpan.org/~nikc/List-PowerSet-0.01/lib/List/PowerSet.pm
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; sub powerset { my $set = shift; my $powerset = []; my $n = @$set; for my $i (0 .. 2 ** $n - 1) { my $subset = []; for my $j (0 .. $n - 1) { push @$subset, $set->[$j] if ($i & 2 ** $j); } push @$powerset, $subset; } return $powerset; } sub powersubset { my ($set, $n, $i) if 0; if (@_) { if (ref $_[0] eq "ARRAY") { $set = $_[0]; $n = @$set; if (@_ > 1) { $i = $_[1]; } else { $i = undef; return; } } else { $i = $_[0]; } } else { $i = (defined $i) ? $i + 1 : 0; return if $i >= 2 ** $n; } my $subset = []; for my $j (0 .. $n - 1) { push @$subset, $set->[$j] if ($i & 2 ** $j); } return $subset; } my $set = ['foo', 'bar', 'baz']; my $powerset = powerset($set); print Dumper $powerset; print "-"x40, "\n"; my $powersubset = powersubset($set); print Dumper $powersubset; $powersubset = powersubset() for 0..2; print Dumper $powersubset; $powersubset = powersubset($_) for 0..2; print Dumper $powersubset; $powersubset = powersubset() for 0..2; print Dumper $powersubset; print "-"x40, "\n"; powersubset($set); while (defined($powersubset = powersubset())) { print Dumper $powersubset; } print "-"x40, "\n"; $powersubset = powersubset($set, 2); print Dumper $powersubset; __END__ -- Affijn, Ruud "Gewoon is een tijger." -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/