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

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

    Use a view pattern!

    {-# LANGUAGE ViewPatterns #-}
    
    everynth n (drop (n-1) -> l)
      | null l = []
      | otherwise = head l : everynth n (tail l)
    

    Ugly version of Nefrubyr's answer preserved so comments make sense.

    everynth :: Int -> [a] -> [a]
    everynth n l = case splitAt (n-1) l of
                     (_, (x:xs)) -> x : everynth n xs
                     _           -> []
    

提交回复
热议问题