我不明白为什么在这需要concatMap而不是简单的map:
expand :: [[Int]] -> [[Int]]
expand xs = concatMap (\a -> (map (\b -> a++b) [[1],[2],[3]])) xs
不要a和b各自只在它们各自的任务中选择一个简单的列表,那么作为这些列表的串联的++ b应该只是另一个列表吗?
欣赏一些见解......
答案 0 :(得分:1)
map
保留输入列表中的元素数量,因此您不仅可以使用它,因为您要在输出中为输入列表中的每个列表创建三个元素。 concatMap
允许您通过返回要合并到输出列表中的列表来执行此操作。内部地图为输入列表创建了这三个列表,但由于它返回了每个输入列表的列表列表,因此您需要删除额外的嵌套层。