给定起始编号和增量后,我希望能够在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]),因此无法使用。
我们可以构造一个范围:
[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)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |