Дано перелік списків, наприклад ((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
? Якщо так, то яке це ім'я?
Відповіді:
7 для відповіді № 1Найкраще слово для нього є транспортувати.
Ваш список списків можна розглядати як матрицю, і це матрична транспозиція.
6 для відповіді № 2
У Haskell ця функція викликається транспортувати.
4 для відповіді № 3
Для таких питань, як правило, я звертаюся до Hoogle для натхнення. Після сортування підпису типу для вашої функції, Hoogle говорить нам, що haskell використовує обидва транспортувати і послідовність виконайте це перетворення (хоча вам доведеться трохи прищуритися в послідовності, щоб помітити, що це означає те саме для списку монади).
Транспонування виглядає краще як перелік конкретної операції, але послідовність робить багато сенсу при роботі з іншими монадами.