How to get every Nth element of an infinite list in Haskell?

后端 未结 23 1364
再見小時候
再見小時候 2020-12-04 23:58

More specifically, how do I generate a new list of every Nth element from an existing infinite list?

E.g. if the list is [5, 3, 0, 1, 8, 0, 3, 4, 0, 93, 211, 0

23条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-05 00:55

    It's more elegant to solve a related problem first: Keep every element whose index is divisible by n.

    everyNth n [] = []
    everyNth n (x:xs) = x : (everyNth n . drop (n-1)) xs
    

    And then to solve the example, use

    everyNthFirst n = everyNth n . drop (n-1)
    

    everyNthFirst 3 [5, 3, 0, 1, 8, 0, 3, 4, 0, 93, 211, 0 ...] gives [0, 0, 0, ...]

提交回复
热议问题