如何在Haskell中创建自己的列表?

时间:2018-08-09 09:01:56

标签: list haskell

我想在Haskell中创建自己的列表,在其中可以输入数字6并得到结果[1,2,3,4,5,6]

我以为我可以写类似的东西

ones :: Int ->  [a]
ones 0 = []
ones n = [n, n-1 ... n==0]

有人可以帮我吗?

1 个答案:

答案 0 :(得分:5)

有很多方法可以做到这一点。在非详尽列表下方。

您可以使用Haskells列表范围:

ones :: (Enum n, Num n) -> n -> [n]
ones n = [1 .. n]

您可以使用enumFromTo :: Enum a => a -> a -> [a]函数:

ones :: (Enum n, Num n) -> n -> [n]
ones = enumFromTo 1

或者我们可以使用显式递归:

ones :: (Ord n, Num n) => n -> [n]
ones n = go 1
    where go i | i <= n = i : go (i+1)
               | otherwise = []

或通过使用iterate :: (a -> a) -> a -> [a]take :: Int -> [a] -> [a]

ones :: Num n => Int -> [n]
ones n = take n (iterate (1+) 1)

请注意,并非所有方法都具有相同的签名。某些实现不需要数字类型作为Enum类型类的实例,从某种意义上来说,可以使函数更加灵活,因为无法枚举的数字类型仍可以得到处理。