在haskell中实现无限列表

时间:2014-03-15 03:59:45

标签: list haskell recursion infinite

一直在努力。不知道从哪里开始..

我需要定义一个取整数的函数,并返回一个从0到n-1的无限重复的数字列表。

    cycle n =
        let aux1 v1 n 
            |(v1 == n) = v1 : (aux1 0 n)
            | (v1<n) = v1 : (aux1 (v1 + 1) n)
        in aux1 0 n

5 个答案:

答案 0 :(得分:4)

@piotrek

还有一个更短的解决方案:

cycle' n = [0..]>>[0..n-1]

答案 1 :(得分:3)

cycle' n = [0..n-1] ++ cycle' n

但我必须添加一些字符,因此堆栈溢出可以接受这样一个简短的答案:)

答案 2 :(得分:1)

cycle' n = xs
    where xs = take n [0 ..] ++ xs

答案 3 :(得分:1)

生成大量无限系列的一种简单明了的方法是在一个简单的流上使用高阶函数(mapfilterfold)。

例如,这里有两种生成无限系列自然偶数的方法:

evens = filter even [1..]
evens = map (*2) [1..]

使用此方法可以轻松解决您的问题。您可能想查看mod的作用。祝你好运!

答案 4 :(得分:0)

我会这样做:

cycle' n = concat $ repeat [0..n-1]