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

在Haskell中的基本情况下返回递归函数的临时值,haskell,recursion,Haskell,Recursion,我是Haskell的新手,正在尝试通过实现Needleman-Wunsch算法来学习 现在,我正在构建这个表,然后算法递归地向后走,以获得更好的分数。 但是,基本大小写此时返回一个空字符串 代码如下: type AlignmentType = (String, String) optAlignments :: String -> String -> [AlignmentType] optAlignments xs ys = optLen (length xs) (length ys)

我是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)
type AlignmentType=(字符串,字符串)
选项::字符串->字符串->[AlignmentType]
optAlignments xs ys=optLen(长度xs)(长度ys)
哪里
optLen i j=可选择!!我J
optTable=[[optEntry i j | j[AlignmentType]
Opentry[0=[]
Opentry 0=[]
optEntry i j

|x==y=[([b],[c])|(b:bs,c:cs)传递从基本递归情况返回的值的典型方法是使用“累加器”参数(在SICP中大量使用).思考一下
fold
如何在基本情况下返回值。是否可以向递归函数中添加一个参数,该函数是在递归步骤中生成的,并在基本情况下返回?