On Sat, Sep 05, 2009 at 02:52:50AM -0700, staafmeister wrote: > How would experienced haskellers solve this problem?
You could just memoize using an array, like in C. import Data.Array occurrences :: Num a => String -> String -> a occurrences key buf = grid ! (0, 0) -- grid ! (i, j) = occurrences (drop i key) (drop j buf) where grid = listArray ((0, 0), (nk, nb)) [ if i == nk then 1 else if j == nb then 0 else (if key !! i == buf !! j then grid ! (i+1, j+1) else 0) + grid ! (i, j+1) | i <- [0..nk], j <- [0..nb] ] nk = length key nb = length buf Regards, Reid _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe