在哈斯克尔中细分列表?(不导入 Data.List.Split)



>我正在做一个作业,我必须创建一个应该像这样工作的函数:[1,2,3,4,5,6,7,8,9] 3 ->[[1,2,3],[4,5,6],[7,8,9]]问题是我不确定是否允许导入库来完成作业。谁能帮我想出一种不使用Import Data.List.Split的方法?

我对Haskell相当陌生,所以我甚至不知道我应该从哪里开始。

通常当你不如何开始。尝试找到可以帮助您解决较大问题的较小子问题是值得的。

其中一个子问题可能被赋予一个列表和一个整数n,以将列表拆分为两个子列表,其中第一个子列表接受前n个项目,第二个列表是其余元素的列表。像这样:

splitAt :: Int -> [a] -> ([a], [a])
splitAt n xs = …

此外,当您想要推理算法时,使用显式递归是一个好主意。 如果他说很多列表处理可以用折叠函数完成,@RobinZigmond是正确的。但我认为现在最好用显式递归来解决问题。

许多列表处理将空列表作为基本情况,将非空列表作为递归情况。因此,我们可以实现如下内容:

splitN :: Int -> [a] -> [[a]]
splitN _ [] = …
splitN n xs = …

这里的第二行是一个递归情况,因此我们根据自身实现splitN。我在这里给出了如何实现它的"骨架"。我把它作为填写缺失项目((的练习。

最新更新