in reply to Combinations / permutations... not even sure what this is called

Perl 6 has that basically built-in with the X ("cross") operator:

say (('red','blue') X ('small','medium','large') X (1,2,3,4)).tree.map +: *.join('-');

produces

red-small-1 red-small-2 red-small-3 red-small-4 red-medium-1 red-mediu +m-2 red-medium-3 red-medium-4 red-large-1 red-large-2 red-large-3 red +-large-4 blue-small-1 blue-small-2 blue-small-3 blue-small-4 blue-med +ium-1 blue-medium-2 blue-medium-3 blue-medium-4 blue-large-1 blue-lar +ge-2 blue-large-3 blue-large-4

Replies are listed 'Best First'.
Re^2: Combinations / permutations... not even sure what this is called
by BrowserUk (Patriarch) on Oct 29, 2011 at 05:27 UTC

    Shame you can't do infix ops in P5 :(

    #! perl -slw use strict; sub X ($$) { my( $ra, $rb ) = @_; [ map{ my @x = ref() ? @$_ : $_; map[ ref() ? @$_ : $_, @x ], @$ra; } @$rb ] } my @c = ('red','blue'); my @s = ('small','medium','large'); my @n = (1,2,3,4); print join ' - ', @$_ for @{ X( \@c, \@s ) }; print join ' - ', @$_ for @{ X( X( \@c, \@s ), \@n ) }; __END__ C:\test>xop red - small blue - small red - medium blue - medium red - large blue - large red - small - 1 blue - small - 1 red - medium - 1 blue - medium - 1 red - large - 1 blue - large - 1 red - small - 2 blue - small - 2 red - medium - 2 blue - medium - 2 red - large - 2 blue - large - 2 red - small - 3 blue - small - 3 red - medium - 3 blue - medium - 3 red - large - 3 blue - large - 3 red - small - 4 blue - small - 4 red - medium - 4 blue - medium - 4 red - large - 4 blue - large - 4

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.