[Haskell-beginners] While Condition in Haskell

Lorenzo Isella lorenzo.isella at gmail.com
Mon Oct 11 07:57:28 EDT 2010


Thanks.
Actually, your example looks remarkably compact.
Cheers

Lorenzo



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



More information about the Beginners mailing list