http://www.perlmonks.org?node_id=250930


in reply to Creating tuples based on sets

Update: I missed the part about needing arbitrarily sized tuples. This only groups in sets of two...my bad. :(

Original message follows...

Ah, the joys of dot products. No need for recursion:

#!/usr/bin/perl -w @set = qw(A B C); print join("\n", map(join(',', @$_), @{&make_tuples(\@set, \@set)})); sub make_tuples { my($set1, $set2) = @_; my @product; foreach my $x (0 .. $#$set1) { foreach my $y (0 .. $#$set2) { push(@product, [$set1->[$x], $set2->[$y]]); } } \@product; }

I daresay I just answered a homework question for you, but so be it.

Matt