Real World Haskell's chapter 4 has the following problem:
Write a function splitWith that acts similarly to words, but takes a predicate and a list of any type, and splits its input list on every element for which the predicate returns False.
I really wanted to do this with a foldr. The problem just seems to call for fold. Here is my attempt. I put a bit extra there to make sure I handle things I didn't like.
I feel dirty.
3 comments:
Darn blogging engine can't pretty print Haskell. Spacing looks WRONG :(
splitter i s@(ac:acs) | (f i) = ((i:ac):acs)
| (null ac) = s
| otherwise = []:s
A new version, using the s@ syntax, and using dropWhile instead of the explicit recursion to chop the leading badness can be found at: http://gist.github.com/62421
Post a Comment