遍历Haskell中的2个列表

时间:2019-12-15 01:10:14

标签: haskell

我被困在一个练习中,基本上,如果给我们2个字符串列表,我们需要检查它们两个,看看第一个列表是否包含与第二个列表相等的值,如果确实如此,将内容保存在列表中,然后将其全部放入字符串列表中。

我有此代码:

funcaoFinal [] [] = []
funcaoFinal _ [] = []
funcaoFinal (x:xs) (y:ys)
   | xs == [] = funcaoFinal (x:xs) ys
   | raioVizinhanca x y = ((splitVirgula y) !! 2) : funcaoFinal (x:xs) ys
   | otherwise = funcaoFinal xs (y:ys)

如果您要问 raioVizinhanca 做什么,它只是检查一种情况,这不是问题。关于 splitVirgula ,它只需要我们要放入列表中的内容,而不用区分此功能。 我的问题是:我知道该代码/递归并不能满足我们的要求,因为它不保存原始列表,无法在xs == []之后继续搜索,而且我也不知道该怎么做。 Haskell保存该列表并再次对其进行遍历,但我没有看到此问题的另一种可能性。有人有什么主意吗 ?如果您需要一些示例(以防万一,您不知道它必须做什么),只需询问。

1 个答案:

答案 0 :(得分:1)

您可以使用范围技巧以“询问”的方式“保存”某些内容。

funcaoFinal xs0 ys0 = funcaoFinal' xs0 ys0
    where
    funcaoFinal' [] [] = []
    -- the rest of your implementation here

(请注意,'是标识符字符,因此funcaoFinal'是与funcaoFinal不同的名称。)

现在,如果您以相同的递归方式定义funcaoFinal',您将可以访问外部函数(它们是原始列表)中作为参数绑定的xs0ys0。 / p>