如何将列表转换为Haskell中的嵌套列表

时间:2018-01-10 23:34:25

标签: haskell

如何将列表转换为嵌套列表,例如:

[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]

3 个答案:

答案 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]
相关问题