Каково собственное имя zip-подобного метода, который «разворачивает» список списков? - PullRequest
4 голосов
/ 20 января 2012

Учитывая список списков, например ((a b c d) (e f g h) (i j k l) (m n o p) (q r s t)), я хотел бы написать преобразование в новый список списков, состоящий из первого элемента из каждого списка, следующего за вторым элементом из каждого списка и т. Д. (В мой пример, результатом этого будет ((a e i m q) (b f j n r) (c g k o s) (d h l p t))).

У этой операции есть другое имя, кроме zip? Если так, как это имя?

Ответы [ 3 ]

7 голосов
/ 20 января 2012

Лучшее слово для этого, вероятно, транспонировать .

Ваш список списков можно рассматривать как матрицу, а это матричное преобразование.

6 голосов
/ 20 января 2012

В Haskell эта функция называется transpose .

4 голосов
/ 25 января 2012

Для подобных вопросов я обычно обращаюсь к Hoogle за вдохновением. После того, как мы отсортировали сигнатуру типа для вашей функции, Hoogle сообщает нам, что haskell использует и transpose , и sequence , чтобы выполнить это преобразование (хотя вы должны косить немного по порядку, чтобы заметить, что это означает то же самое для монады списка).

Транспонирование выглядит лучше как операция, специфичная для списка, но последовательность имеет большой смысл при работе с другими монадами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...