我有一个双打列表看起来像这样:
[4354.36,4220.0,4356.41,4400.0,4369.74,4481.54,4601.03,4024.1,4436.41]
现在我想创建一个如下所示的嵌套列表:
[[4354.36,4220.0],[4356.41,4400.0],[4369.74,4481.54],[4601.03,4024.1],[4436.41,4856.25]]
我应该遍历列表吗?在Haskell中这怎么可能?
答案 0 :(得分:5)
有一个库函数可以将列表拆分成这样的块,它在Data.List.Split包中称为“chunksOf”。
在GHCI中尝试:
import Data.List.Split
chunksOf 2 [4354.36,4220.0,4356.41,4400.0,4369.74,4481.54,4601.03,4024.1,4436.41]
答案 1 :(得分:5)
如果你是haskell的新手,那么自己实现这个功能是值得的,即使它只是一个学习练习。
作为一名haskell初学者来自我的:
chunksOf2 :: [a] -> [[a]]
chunksOf2 [] = []
chunksOf2 [x] = [[x]]
chunksOf2 (x:y:ys) = [x,y]:(chunksOf2 ys)
在函数式语言中,不像在命令式语言中那样使用for
/ while
循环遍历迭代,而是使用递归和高阶函数。
恕我直言,原因之一是因为一旦你用(纯)函数语言定义变量,你就无法改变它的价值。
Learn you a haskell for great good是学习haskell的好资源,并且专门针对recursion页面。