我不明白为什么这里需要concatMap,而不是简单的映射:
expand :: [[Int]] -> [[Int]]
expand xs = concatMap (\a -> (map (\b -> a++b) [[1],[2],[3]])) xsA和b在各自的赋值中不是都只选择了一个简单的列表,所以作为这些列表的串联的a++b应该只是另一个列表吗?
希望能有一些洞察力...
发布于 2014-11-10 03:21:52
map保留了输入列表中的元素数量,因此您不能只使用它,因为您希望在输出中为输入列表中的每个列表创建三个元素。concatMap允许您通过返回一个要合并到输出列表中的列表来实现这一点。内部映射为输入列表创建了这三个列表,但由于它为每个输入列表返回一个列表列表,因此需要删除额外的嵌套层。
https://stackoverflow.com/questions/26831841
复制相似问题