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

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

    An uglier, and more limited version of the accepted answer

    every :: Eq a => Int -> [a] -> [a]
    every n xs = if rest == [] 
                    then [] 
                    else head rest : every n (tail rest)
        where rest = drop (n-1) xs
    

    For "line golfing" it can be written like this:

    every n xs = if rest == [] then [] else head rest : every n (tail rest) 
        where rest = drop (n-1) xs
    

    (It's more limited because it has an unnecessary Eq a constraint.)

提交回复
热议问题