Difference between revisions of "99 questions/Solutions/10"
< 99 questions | Solutions
Jump to navigation
Jump to search
m (Added note on MR) |
m (Linked to MR) |
||
Line 13: | Line 13: | ||
</haskell> |
</haskell> |
||
− | Or writing it [[Pointfree]] (Note that the type signature is essential here to avoid hitting the Monomorphism Restriction): |
+ | Or writing it [[Pointfree]] (Note that the type signature is essential here to avoid hitting the [[Monomorphism Restriction]]): |
<haskell> |
<haskell> |
Revision as of 20:38, 20 July 2010
(*) Run-length encoding of a list.
Use the result of problem P09 to implement the so-called run-length encoding data compression method. Consecutive duplicates of elements are encoded as lists (N E) where N is the number of duplicates of the element E.
encode xs = map (\x -> (length x,head x)) (group xs)
which can also be expressed as a list comprehension:
[(length x, head x) | x <- group xs]
Or writing it Pointfree (Note that the type signature is essential here to avoid hitting the Monomorphism Restriction):
encode :: Eq a => [a] -> [(Int, a)]
encode = map (\x -> (length x, head x)) . group
Or (ab)using the "&&&" arrow operator for tuples:
encode :: Eq a => [a] -> [(Int, a)]
encode xs = map (length &&& head) $ group xs