[Haskell-cafe] String search algorithms

Henning Thielemann lemming at henning-thielemann.de
Mon Apr 25 06:35:31 EDT 2005


On Mon, 25 Apr 2005, Henning Thielemann wrote:

> On Mon, 25 Apr 2005, Bayley, Alistair wrote:
>
>> I'm a bit puzzled to find no sub-string search in the Haskell libraries
>> (unless there's some neat composition of the existing Data.List functions
>> that I've missed). Google doesn't help much either. I've found a KMP
>> implementation:
>>  http://haskell.org/hawiki/RunTimeCompilation
>> 
>> I'm after something that'll report the position of the first occurrence,
>> like Java's String.indexOf().
>
> List.findIndex (List.isPrefixOf "bla") (List.tails "dfvbdbblaesre")

But I'm curious if you really need the index. Working with indexes on 
lists is quite inefficient. E.g. if you want to replace substrings you 
may want to use this implementation:

replace :: forall a. (Eq a) => [a] -> [a] -> [a] -> [a]
replace src dst =
    foldr (\x xs -> let y=x:xs
                    in  if isPrefixOf src y
                          then dst ++ drop (length src) y
                          else y) []

Prelude Data.List> replace "ocu" "orcu" "hocuspocus"
"horcusporcus"


More information about the Haskell-Cafe mailing list