gpt4 book ai didi

list - 在 Haskell 中创建一个数字递增的列表列表

转载 作者:行者123 更新时间:2023-12-01 07:09:13 24 4
gpt4 key购买 nike

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

例如:

>listIncrease 5 3
[[5], [5,6], [5,6,7]]

我曾尝试使用递归函数,但一直无法正确使用该函数。

这是我目前拥有的:

listIncrease :: Int -> Int -> [[Int]]
listIncrease a 0 = []
listIncrease a b = [[a..a+b-1], (listIncrease a (b-2))]

我知道这不会起作用,因为基本情况和基本情况不正确,递归步骤因为你不能把 [[Int]] 变成 [Int]。

最佳答案

我们可以构造一个范围:

[5 .. 7]

创建我们想要的最终列表:
Prelude> [5 .. 7]
[5,6,7]

然后我们可以使用 inits :: [a] -> [[a]] 生成所有前缀:
Prelude Data.List> inits [5 .. 7]
[[],[5],[5,6],[5,6,7]]

我们可以使用 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])

例如:
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]]

关于list - 在 Haskell 中创建一个数字递增的列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57862965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com