It also comes to my mind that you can use something similar to regular expressions and parsing, seeing your list as a word made of Int elements. I think you can achieve it using Parsec or attoparsec.
One you define your basic combinators for 'odd', you can see your sublist as the minimal part of the list matching
(even* odd)(even* odd)(even* odd)(even* odd)

2012/9/25 Ivan Lazar Miljenovic <ivan.miljenovic@gmail.com>
On 25 September 2012 16:51, Magicloud Magiclouds
<magicloud.magiclouds@gmail.com> wrote:
> 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].

If you have listTest :: [a] -> Bool, then head . dropWhile (not .
listTest) . inits ?

>   How to do that? Combining lazy computing, I cannot figure out an
> efficient algorithm.
> --
> 竹密岂妨流水过
> 山高哪阻野云飞
>
> And for G+, please use magiclouds#gmail.com.
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



--
Ivan Lazar Miljenovic
Ivan.Miljenovic@gmail.com
http://IvanMiljenovic.wordpress.com

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe