在haskell中创建双打的嵌套循环

时间:2014-11-26 13:35:51

标签: haskell

我有一个双打列表看起来像这样:

[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中这怎么可能?

2 个答案:

答案 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页面。