在Haskell中返回基本情况下递归函数的临时值

时间:2015-12-01 15:47:56

标签: haskell recursion

我是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)]中的值?

0 个答案:

没有答案