Haskell交换嵌套列表

时间:2016-05-02 16:38:42

标签: list haskell swap

我有这个功能:

swap [] = []
swap [a] = [a] 
swap a = last a : (init . tail $ a) ++ [head a] 

如果我在带有列表的列表中使用它,它只是转动每个列表,而不是每个列表中的元素。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

swap获取一系列内容,并将其第一个元素交换为最后一个元素。由于根本没有关于在那些元素中查找内部的内容,它绝对不会修改列表中的任何元素。

但是如果你有一个列表,并且你想对列表中的每个项目进行一些修改,那么已经有了一个函数:map。您想要执行的修改是swap,所以让我们看看这些类型是如何排列的。

     map :: (  a ->   b) ->   [a] ->   [b]
    swap ::  [a] -> [a]
map swap ::                 [[a]] -> [[a]]

所以map swap获取列表列表,并交换每个子列表,而根本不更改“更大”列表的顺序。