以下是代码:
import Data.Function.Memoize
main = do
let
f 0 0 = 0
f 0 _ = 0
f _ 0 = 0
f n m = if a !! n == b !! m
then 1 + f' (n-1) (m-1)
else max (f' (n-1) m) (f' n (m-1))
f' = memoize2 $ f
print $ length a
print $ length b
print $ f (length a - 1) (length b - 1)
where
a = "1234helloworld2ffdfdfdf32rg4364jm5"
b = "03424helloworldfdfdfdfd4353645645jnt"
但问题是我无法全局编写函数,其中字符串a和b作为参数传递给它。好像我改写了
f n m
到
f a b n m
和
f' = memoize4 f
该功能将加速。
如何将不应在memoization中使用的参数传递给使用memoize的函数?
所以我写这样的全局函数,它确实有效!
但是如何累积它找到的公共字符串并使用此函数获得最终结果?
lcs a b = f (length a - 1) (length b - 1)
where
f 0 0 = 0
f 0 _ = 0
f _ 0 = 0
f n m = if a !! n == b !! m
then (1 + f' (n-1) (m-1))
else max (f' (n-1) m) (f' n (m-1))
f' = memoize2 $ f