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

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

    Another way of doing it:

    takeEveryM m lst = [n | (i,n) <- zip [1..] lst, i `mod` m == 0]
    

    Yet Another:

    import Data.List
    
    takeEveryMth m = 
      (unfoldr g)  . dr
         where 
           dr = drop (m-1)
           g (x:xs) = Just (x, dr xs)
           g []     = Nothing
    

提交回复
热议问题