Hi, Am Mittwoch, den 28.05.2008, 23:53 +0200 schrieb Pieter Laeremans: > Hello, > > I need a break function that splits the list one element further than > the ordinary break. > This is the simplest solution I could imagine: > > breakI :: (a -> Bool) -> [a] -> ([a], [a]) > breakI p s = case break p s of > ([], []) -> ([], []) > (x, []) -> (x, []) > (x, l) -> (x ++ [head l], tail l ) > > Is there a better way to write this ?
appending an element to a list is expensive, so if this is a problem you
can try this:
breakI _ [] = ([], [])
breakI p (x:xs')
| p x = ([x],xs')
| otherwise = let (ys,zs) = breakI p xs' in (x:ys,zs)
It is basically the Prelude.break from
http://haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-List.html#break
with the forth line (with p x) changed.
Greetings,
Joachim
--
Joachim "nomeata" Breitner
mail: [EMAIL PROTECTED] | ICQ# 74513189 | GPG-Key: 4743206C
JID: [EMAIL PROTECTED] | http://www.joachim-breitner.de/
Debian Developer: [EMAIL PROTECTED]
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
