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

后端 未结 23 1327
再見小時候
再見小時候 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:37

    And a very functional one without apparent conditionals:

    everyNth :: Int -> [a] -> [a]
    everyNth 0 = take 1
    everyNth n = foldr ($) [] . zipWith ($) operations where
      operations = cycle $ (:) : replicate (n-1) (const id)
    

    (Note, this one takes every element whose index is a multiple of n. Which is slightly different from the original question, but easy to convert.)

提交回复
热议问题