Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. question on evaluation (Fabien R) 2. Re: question on evaluation (Theodore Lief Gannon) ---------------------------------------------------------------------- Message: 1 Date: Sat, 9 Jan 2016 16:21:46 +0100 From: Fabien R <theedge...@free.fr> To: Haskell Beginners <beginners@haskell.org> Subject: [Haskell-beginners] question on evaluation Message-ID: <5691258a.2060...@free.fr> Content-Type: text/plain; charset=utf-8; format=flowed Hello, I want to define a function blowup that takes "bang" as input and returns "baannngggg". I come up with these functions; myReverse :: [a] -> [a] myReverse [] = [] myReverse (x:xs) = myReverse xs ++ [x] buildLenList :: String -> [Int] buildLenList "" = [] buildLenList (_:xs) = [1 + length xs ] ++ buildLenList xs myRepeat :: Char -> Int -> String myRepeat x 0 = [] myRepeat x n = [x] ++ myRepeat x (n - 1) blowup :: String -> String blowup [] = [] blowup (x:xs) = myRepeat x (head ( (buildLenList (x:xs)))) ++ blowup xs With this code, blowup "bang" returns "bbbbaaanng". So I thought to insert myReverse between head and buildLenList but in that case, the result is only "bang". It seems that the evaluation of buildLenList is not working as I thought. I tried to debug that using ghci debugger but failed (still learning). Can someone explain how the evaluation is done here ? -- Fabien ------------------------------ Message: 2 Date: Sat, 9 Jan 2016 15:54:41 -0800 From: Theodore Lief Gannon <tan...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] question on evaluation Message-ID: <CAJoPsuA_T7Je78YO-XScMFqrtWoT+EB84M8==Q_fb=r84ua...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Here's why you're getting the longer repetition first: buildLenList "bang" = buildLenList (_:"ang") = [1 + length "ang"] ++ buildLenList "ang" = [4] ++ buildLenList "ang" (...) = [4, 3, 2, 1] And the reason calling myReverse on that doesn't give you [1, 2, 3, 4] is that you're reversing a different list every time: blowup "bang" = blowup ('b':"ang") = myRepeat 'b' (head (myReverse (buildLenList ('b':"ang"))) ++ blowup "ang" = myRepeat 'b' (head (myReverse [4, 3, 2, 1]) ++ blowup "ang" = myRepeat 'b' (head [1, 2, 3, 4] ++ blowup "ang" = myRepeat 'b' 1 ++ blowup "ang" = "b" ++ blowup "ang" = "b" ++ blowup ('a':"ng") = "b" ++ myRepeat 'a' (head (myReverse (buildLenList ('a':"ng"))) ++ blowup "ng" = "b" ++ myRepeat 'a' (head (myReverse [3, 2, 1]) ++ blowup "ng" = "b" ++ myRepeat 'a' (head [1, 2, 3] ++ blowup "ng" (...) Since you only asked for help with how it evaluates, I'll withhold further spoilers. :) However, I strongly recommend getting more comfortable using the (:) operator for construction instead of just pattern matching; in a couple of your functions it would be a better tool than (++). Also, "at-patterns" are great: blowup l@(x:xs) = myRepeat x (head (buildLenList l)) ++ blowup xs On Sat, Jan 9, 2016 at 7:21 AM, Fabien R <theedge...@free.fr> wrote: > Hello, > > I want to define a function blowup that takes "bang" as input and returns > "baannngggg". > I come up with these functions; > > myReverse :: [a] -> [a] > myReverse [] = [] > myReverse (x:xs) = myReverse xs ++ [x] > > buildLenList :: String -> [Int] > buildLenList "" = [] > buildLenList (_:xs) = [1 + length xs ] ++ buildLenList xs > > myRepeat :: Char -> Int -> String > myRepeat x 0 = [] > myRepeat x n = [x] ++ myRepeat x (n - 1) > > blowup :: String -> String > blowup [] = [] > blowup (x:xs) = myRepeat x (head ( (buildLenList (x:xs)))) ++ blowup xs > > With this code, blowup "bang" returns "bbbbaaanng". > > So I thought to insert myReverse between head and buildLenList but in that > case, the result is only "bang". > > It seems that the evaluation of buildLenList is not working as I thought. > I tried to debug that using ghci debugger but failed (still learning). > Can someone explain how the evaluation is done here ? > > -- > Fabien > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20160109/46db73d9/attachment-0001.html> ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 91, Issue 16 *****************************************