类似拉链的方法的正确名称是什么?“列出”列表列表?

时间:2012-01-19 22:23:57

标签: 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)))。

除了zip之外,此操作是否具有不同的名称?如果是这样,那个名字是什么?

3 个答案:

答案 0 :(得分:7)

最好的词可能是transpose

您的列表列表可以被视为一个矩阵,这是一个矩阵转置。

答案 1 :(得分:6)

在Haskell中,此函数称为transpose

答案 2 :(得分:4)

对于这样的问题,我通常会向Hoogle寻求灵感。在我们为您的函数整理出类型签名后,Hoogle告诉我们haskell同时使用transposesequence执行此转换(尽管您必须在序列上稍微眯一下才会注意到这对于列表monad来说意味着相同的事情。)

转置似乎更适合作为列表特定的操作,但在与其他monad一起工作时,序列很有意义。