f x 0 = []f (x:xs) y | x `mod` 2 == 0 = x : (f xs y) | otherwise = x : (f xs (y-1)) > f [0..] 4> [0,1,2,3,4,5,6,7] > To: haskell-cafe@haskell.org > From: jon.fairba...@cl.cam.ac.uk > Date: Tue, 25 Sep 2012 10:16:52 +0100 > Subject: Re: [Haskell-cafe] How to take a minimum sub list that only contain > certain number of elements of certain type? > > Magicloud Magiclouds <magicloud.magiclo...@gmail.com> writes: > > > Hi, > > For example, I have an array [0..]. Now I want to take a sub list > > that starts from index 0, and only contain 4 odds, and is minimum > > result. The answer should be [0, 1, 2, 3, 4, 5, 6, 7]. > > How to do that? Combining lazy computing, I cannot figure out an > > efficient algorithm. > > Does > > f bound odds_so_far [] = [] > f bound odds_so_far (x:xs) > | odds_so_far == bound = [] > | otherwise = x : f bound (odds_so_far + if odd x then 1 else 0) xs > > required_funciton = f 4 0 > > meet your criteria, or am I missing something? > > -- > Jón Fairbairn jon.fairba...@cl.cam.ac.uk > > > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe