Understanding this matrix transposition function in Haskell

前端 未结 3 2042
伪装坚强ぢ
伪装坚强ぢ 2021-02-12 06:43

This matrix transposition function works, but I\'m trying to understand its step by step execurtion and I don\'t get it.

    transpose:: [[a]]->[[a]]
    tran         


        
3条回答
  •  梦谈多话
    2021-02-12 07:24

    Let's look at what the function does for your example input:

    transpose [[1,2,3],[4,5,6],[7,8,9]]
    <=>
    (map head [[1,2,3],[4,5,6],[7,8,9]]) : (transpose (map tail [[1,2,3],[4,5,6],[7,8,9]]))
    <=>
    [1,4,7] : (transpose [[2,3],[5,6],[8,9]])
    <=>
    [1,4,7] : (map head [[2,3],[5,6],[8,9]]) : (transpose (map tail [[2,3],[5,6],[8,9]]))
    <=>
    [1,4,7] : [2,5,8] : (transpose [[3],[6],[9]])
    <=>
    [1,4,7] : [2,5,8] : (map head [[3],[6],[9]]) : (transpose (map tail [[3],[6],[9]]))
    <=>
    [1,4,7] : [2,5,8] : [3, 6, 9] : (transpose [[], [], []])
    <=>
    [1,4,7] : [2,5,8] : [3, 6, 9] : [] -- because transpose ([]:_) = []
    <=>
    [[1,4,7],[2,5,8],[3,6,9]]
    

    Note that the order in which I chose to reduce the terms, is not the same as the evaluation order haskell will use, but that does not change the result.

    Edit: In response to your edited question:

    is this

    (map head x)
    

    creating a list of the head elements of each list?

    Yes, it is.

提交回复
热议问题