标签: functional-programming
给定一个列表列表,例如((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)))。
((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之外,此操作是否具有不同的名称?如果是这样,那个名字是什么?
zip
答案 0 :(得分:7)
最好的词可能是transpose。
您的列表列表可以被视为一个矩阵,这是一个矩阵转置。
答案 1 :(得分:6)
在Haskell中,此函数称为transpose。
答案 2 :(得分:4)
对于这样的问题,我通常会向Hoogle寻求灵感。在我们为您的函数整理出类型签名后,Hoogle告诉我们haskell同时使用transpose和sequence执行此转换(尽管您必须在序列上稍微眯一下才会注意到这对于列表monad来说意味着相同的事情。)
转置似乎更适合作为列表特定的操作,但在与其他monad一起工作时,序列很有意义。