在Haskell中创建数量递增的列表列表

lex*_*449 3 haskell list

给定起始编号和增量后,我希望能够在Haskell中创建列表列表。

例如:

>listIncrease 5 3
[[5], [5,6], [5,6,7]]
Run Code Online (Sandbox Code Playgroud)

我尝试使用递归函数,但无法正确获得该函数。

这是我目前拥有的:

>listIncrease 5 3
[[5], [5,6], [5,6,7]]
Run Code Online (Sandbox Code Playgroud)

我知道由于基本情况和基本情况不正确,以及递归步骤(因为您不能将[[Int]]设为[Int]),因此无法使用。

Wil*_*sem 6

我们可以构造一个范围:

[5 .. 7]
Run Code Online (Sandbox Code Playgroud)

创建我们想要的最终列表:

Prelude> [5 .. 7]
[5,6,7]
Run Code Online (Sandbox Code Playgroud)

然后,我们可以使用inits :: [a] -> [[a]]生成所有前缀:

Prelude Data.List> inits [5 .. 7]
[[],[5],[5,6],[5,6,7]]
Run Code Online (Sandbox Code Playgroud)

我们可以使用drop :: Int -> [a] -> [a]省略第一个元素。

因此,我们可以实现listIncrease为:

import Data.List(inits)

listIncrease :: (Num a, Enum a) => a -> a -> [[a]]
listIncrease lo n = drop 1 (inits [lo .. lo + n - 1])
Run Code Online (Sandbox Code Playgroud)

例如:

Prelude Data.List> listIncrease 7 0
[]
Prelude Data.List> listIncrease 7 1
[[7]]
Prelude Data.List> listIncrease 7 2
[[7],[7,8]]
Prelude Data.List> listIncrease 7 3
[[7],[7,8],[7,8,9]]
Run Code Online (Sandbox Code Playgroud)