В Perl 6 есть метаоператор Z, который объединяет два списка как застежка на молнии, по очереди перемежая элементы. Мы, возможно, рассмотрим его как-нибудь отдельно, но сегодня я хочу показать, как этот оператор магически транспонирует матрицу.
Берем двумерную матрицу:
my @matrixA = [1, 2], [3, 4];
Если хочется, можно поставить еще одни скобки:
my @matrixA = [[1, 2], [3, 4]];
И теперь в одно действие транспонируем:
my @matrixB = [Z] @matrixA;
Метаоператор Z здесь поставлен внутрь оператора редукции. Вуаля, матрица транспонировалась:
[(1 3) (2 4)]