我有这个功能:
swap [] = []
swap [a] = [a]
swap a = last a : (init . tail $ a) ++ [head a]
如果我在带有列表的列表中使用它,它只是转动每个列表,而不是每个列表中的元素。我在这里缺少什么?
答案 0 :(得分:1)
swap
获取一系列内容,并将其第一个元素交换为最后一个元素。由于根本没有关于在那些元素中查找内部的内容,它绝对不会修改列表中的任何元素。
但是如果你有一个列表,并且你想对列表中的每个项目进行一些修改,那么已经有了一个函数:map
。您想要执行的修改是swap
,所以让我们看看这些类型是如何排列的。
map :: ( a -> b) -> [a] -> [b]
swap :: [a] -> [a]
map swap :: [[a]] -> [[a]]
所以map swap
获取列表列表,并交换每个子列表,而根本不更改“更大”列表的顺序。