迭代后,从列表的头部开始

时间:2014-11-16 16:09:52

标签: list loops haskell

我有一个函数检查另一个列表的元组中是否有一个列表中的元素。

existing :: [String] -> [(String,Int)] -> [String]
existing [] _ = []
existing _ [] = []
existing (x:xs) (y:ys) = if x == fst(y) then x:(existing xs (y:ys)) else (existing (x:xs) ys)
                                                            ^^^^^^
                                                   It should start at the beginning.

正如您所看到的,它遍历y列表并检查x是否在那里。当发现时,它应该检查y列表是否x列表中的下一个项目但它不能,因为它位于找到x的位置。我希望你明白我的意思。

1 个答案:

答案 0 :(得分:3)

记住列表的开头是什么,你将能够回到它。

existing :: Eq a => [a] -> [(a, b)] -> [a]
existing allxs allys = go allxs allys
    where
        go [] _ = []
        go _ [] = []
        go (x:xs) (y:ys) =
            if x == fst(y)
            then x:(go xs allys)
            else (go (x:xs) ys)