Hi Lorenzo,<div><br></div><div>what Patrick said was correct. Here's your program a bit more the Haskell way. Also see: <a href="http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-List.html">http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-List.html</a></div>
<meta http-equiv="content-type" content="text/html; charset=utf-8"><div><div><br></div><div><br></div><div><div>import Data.List</div><div><br></div></div><div><div>main = do</div><div> let (past, future) = splitAt 8 [4,55,66,77,88,99,12,9,77,88,99,12,-99]</div>
<div> subfutures = tail . inits $ future</div><div> print . takeWhile (`isInfixOf` past) $ subfutures</div></div><div><br></div><div><br></div><div>Regards,</div><div>Thomas</div><div><br></div><div><br></div><div class="gmail_quote">
On Mon, Oct 11, 2010 at 4:09 AM, Patrick LeBoutillier <span dir="ltr"><<a href="mailto:patrick.leboutillier@gmail.com">patrick.leboutillier@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Lorenzo,<br>
<br>
On Sun, Oct 10, 2010 at 4:15 PM, Lorenzo Isella<br>
<<a href="mailto:lorenzo.isella@gmail.com">lorenzo.isella@gmail.com</a>> wrote:<br>
> ...<br>
<div class="im">> In order to find the length of the longest list in the future which has<br>
> already been seen in the past, I could select the "true" values in the<br>
> output of function<br>
><br>
> iter_find list i<br>
><br>
> but this is a waste of CPU: I simply would like a while condition to tell my<br>
> function to stop checking new sublists as soon as it finds one which has not<br>
> occurred in the past and I would like a counter (a kind of i++) telling me<br>
> how many times the process has been iterated.<br>
<br>
</div>I'm still a beginner myself, but here's my take on it. Since Haskell<br>
is lazy, the results<br>
will only be generated as they are needed. For example, if you change:<br>
<div class="im"><br>
let b = iter_find list i<br>
<br>
</div>for<br>
<br>
let b = takeWhile id $ iter_find list i<br>
<br>
Haskell will stop generating the list as soon as it sees a False result.<br>
Then you can take the length of b as your answer.<br>
<br>
Patrick<br>
<div class="im"><br>
<br>
> Any suggestion is helpful.<br>
> Cheers<br>
><br>
> Lorenzo<br>
><br>
> -------------------------------------------------------------------<br>
><br>
> import Data.Ord<br>
><br>
><br>
> import Data.List<br>
><br>
> main :: IO ()<br>
><br>
> main = do<br>
><br>
><br>
> let list = [4,55,66,77,88,99,12,9,77,88,99,12,-99]<br>
><br>
> let i = 9<br>
><br>
> let b = iter_find list i<br>
><br>
> putStrLn "b is, "<br>
> print b<br>
><br>
><br>
> is_sublist sublist list = sublist `isInfixOf` list<br>
><br>
><br>
> gen_fut_list list i j = take j $ drop (i-1) list<br>
><br>
> gen_past_list list i = take (i-1) list<br>
><br>
> find_in_list list i j = is_sublist (gen_fut_list list i j) (gen_past_list<br>
> list i)<br>
><br>
> iter_find list i = map (find_in_list list i) [1..n]<br>
> where n = (length list) - i +1<br>
><br>
><br>
><br>
><br>
> _______________________________________________<br>
> Beginners mailing list<br>
> <a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
> <a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
><br>
<br>
<br>
<br>
</div><font color="#888888">--<br>
=====================<br>
Patrick LeBoutillier<br>
Rosemère, Québec, Canada<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</div></div></blockquote></div><br></div>