将平展列表转换为长度为3的嵌套列表

时间:2018-11-10 07:18:05

标签: haskell

给出Haskell中的扁平化列表:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

n=3

如何将列表更改为:

[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]

最好是n是变量

的解决方案

1 个答案:

答案 0 :(得分:3)

这是一个很好的示例,展示了如何将unfoldr用作:

f n = unfoldr (\xs->if null xs then Nothing else Just (take n xs, drop n xs))

请注意,它可以接受以下形式的无限列表:

take 4 $ f 3 [1..]

给予

[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]

对于字符

take 4 $ f 3 ['a'..]

给予

["abc","def","ghi","jkl"]