Re: [Haskell-cafe] Help to solve simple problem !

The following program should work: =======compress.hs============= toList :: (Eq a) => [a] -> [[a]] toList [] = [] toList x = start : toList end where (start, end) = span (==(head x)) x toTuple :: [a] -> (a, Int) toTuple x = (head x, length x) compress :: Eq a => [a] -> [(a, Int)] compress x = map toTuple $ toList x ============================= The important thing to understand here, is the "span" function from the Prelude, and apply it recursively. *Main> span (=='A') "AAABCC" ("AAA","BCC") *Main> span (=='h') "hhhaskell" ("hhh","askell") I've used a function "toList" to separate each part of the string into a separate element of a list: *Main> toList "AAABCC" ["AAA","B","CC"] *Main> toList "EEEZZZRRAAAA!!" ["EEE","ZZZ","RR","AAAA","!!"]
From there, "toTuple" takes the first letter of the string, and puts it with its length in a tuple: *Main> toTuple "EEE" ('E',3) *Main> toTuple "EEEEE" ('E',5)
Because of how it's defined, we also get the following: *Main> toTuple "Ezra" ('E',4) But that won't matter if we only use it after "toList", as in "compress". Also, I've used your type signature for my solution, not your example output; if you want it to be displayed like that, you'll have to write your own function for printing. This solution is probably not optimal, but it's a start. Hope that helps, Ezra Aneto wrote:
Hi ! I am beginner in Haskell and have problems with this problem: compress :: Eq a => [a] -> [(a, Int)] If you have string "AAABCCC" it transforms it to : {A, 3} {B,1} {C,3}
Could you help me with it ? Thank you in advance !
-- View this message in context: http://old.nabble.com/Help-to-solve-simple-problem-%21-tp26249028p26292205.h... Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
participants (1)
-
Ezra Lalonde