如何将列表转换为嵌套列表,例如:
[p,q,q] -> [[p],[q],[q]]
我试过这种方式:
return [2,5,6] // But the result is wrong -> [[2,5,6]] (correct would be [[2],[5],[6]] )
return
的实施如下:
return x = [x]
答案 0 :(得分:3)
您应该将其应用于列表的每个元素,而不是列表本身,这可以使用map
来实现:
map (\x -> [x]) [2, 5, 6]
或等同于
map (:[]) [2, 5, 6]
或者,如您所知,使用return
代替\x -> [x]
map return [2, 5, 6]
请注意,在后一种情况下,返回值的类型将为(Monad m) => [m a]
,这比[[a]]
更通用。
答案 1 :(得分:2)
nest [] = []
nest (x:xs) = [x]:nest xs
nest (x:xs) = [x]:nest xs
这将输入分为数组的第一个值(x)和数组的其余部分(xs),然后将第一个值放入数组并将其放在数组的开头,然后是下一个数组value是数组的下一部分。
nest [] = []
当列表为空时,这将终止递归。
答案 2 :(得分:1)
简单的列表理解也适用于此:
toNested :: [a] -> [[a]]
toNested xs = [[x] | x <- xs]