sub cross { my @list = @_.reverse or return; gather { my $count = [*] 1, @_.map:{ .elems }; for 0 .. $count - 1 -> $idx is copy { take [ @_.map:{ ($idx, my $elem) = divmod($idx, .elems); .[$elem] } ].reverse; } } }