21 Nov 2012 22:59
isLetter vs. isAlpha
Artyom Kazak <artyom.kazak <at> gmail.com>
2012-11-21 21:59:20 GMT
2012-11-21 21:59:20 GMT
Hello!
I saw a question on StackOverflow about the difference between isAlpha and
isLetter today. One of the answers stated that the two functions are
interchangeable, even though they are implemented differently.
I decided to find out whether the difference in implementation influences
performance, and look what I found:
> import Criterion.Main
> import Data.Char
>fTest name f list = bgroup name $ map (\(n,c) -> bench n $ whnf f c) list
>tests = [("latin", 'e'), ("digit", '8'), ("symbol", '…'), ("greek", 'λ')]
>main = defaultMain [fTest "isAlpha" isAlpha tests,
> fTest "isLetter" isLetter tests]
produces this table (times are in nanoseconds):
latin digit symbol greek
----- ----- ------ -----
isAlpha | 156 212 368 310
isLetter | 349 344 383 310
isAlpha is twice as fast on latin inputs! Does it mean that isAlpha should
be preferred? Why isn’t isLetter defined in terms of isAlpha in Data.Char?
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
(Continue reading)
RSS Feed