[Haskell-cafe] efficient chop
Thomas DuBuisson
thomas.dubuisson at gmail.com
Wed Sep 14 05:14:46 CEST 2011
This was a recent question on StackOverflow:
http://stackoverflow.com/questions/6270324/in-haskell-how-do-you-trim-whitespace-from-the-beginning-and-end-of-a-string/6270382#6270382
Where I started:
If you have serious text processing needs then use the text package
from hackage.
And concluded:
A quick Criterion benchmark tells me that (for a particularly long
string of words with spaces and ~200 pre and post spaces) my trim
takes 1.6 ms, the trim using reverse takes 3.5ms, and Data.Text.strip
takes 0.0016 ms.
Cheers,
Thomas
On Tue, Sep 13, 2011 at 8:03 PM, Kazu Yamamoto <kazu at iij.ad.jp> wrote:
> Hello Cafe,
>
> I would like to have an efficient implementation of the chop function.
> As you guess, the chop function drops spaces in the tail of a list.
>
> chop " foo bar baz "
> -> " foo bar baz"
>
> A naive implementation is as follows:
>
> chopReverse :: String -> String
> chopReverse = reverse . dropWhile isSpace . reverse
>
> But this is not elegant. foldr version is as follows:
>
> chopFoldr :: String -> String
> chopFoldr = foldr f []
> where
> f c []
> | isSpace c = []
> | otherwise = c:[]
> f c cs = c:cs
>
> But this code is slower than chopReverse in some cases.
>
> Are there any more efficient implementations of chop? Any suggestions?
>
> --Kazu
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
More information about the Haskell-Cafe
mailing list