我是Haskell的新手,正在尝试通过实施 Needleman-Wunsch 算法来学习。
现在,我正在构建表格,然后算法递归地向后移动,取最佳字母以获得更好的分数。 但是,基本案例此时返回一个空字符串。
以下是代码:
type AlignmentType = (String, String)
optAlignments :: String -> String -> [AlignmentType]
optAlignments xs ys = optLen (length xs) (length ys)
where
optLen i j = optTable!!i!!j
optTable = [[ optEntry i j | j<-[0..]] | i<-[0..] ]
optEntry :: Int -> Int -> [AlignmentType]
optEntry _ 0 = []
optEntry 0 _ = []
optEntry i j
| x == y = [([b],[c]) | (b:bs,c:cs) <- optLen (i-1) (j-1)]
| otherwise = max (optLen i (j-1)) (optLen (i-1) j) --to be fixed
where
x = xs!!(i-1)
y = ys!!(j-1)
所以我的问题是,如何在递归结束后返回[([b],[c]) | (b:bs,c:cs) <- optLen (i-1) (j-1)]
中的值?