2012-01-19 63 views
4

給出一個列表的列表,如((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-like方法的正確名稱是什麼?

除了zip之外,此操作是否有明確的名稱?如果是這樣,那個名字是什麼?

回答

7

最好的詞可能是transpose

您的列表清單可以被認爲是一個矩陣,這是一個矩陣轉置。

6

在Haskell中,該函數被稱爲transpose

4

對於這樣的問題,我通常會轉向Hoogle尋求靈感。一旦我們爲你的函數挑選了類型簽名,Hoogle告訴我們haskell同時使用transposesequence執行這個轉換(儘管你必須在順序上眯起一點注意它對列表monad意味着相同的東西)。

轉置似乎更好的列表特定操作,但順序使用其他單子時很有意義。

+3

+1爲Hoogle的精彩搜索類型簽名 –

+2

謝謝!我希望每一種語言都有Hoogle這樣的東西。 – Marc

相關問題