我被困在一个练习中,基本上,如果给我们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保存该列表并再次对其进行遍历,但我没有看到此问题的另一种可能性。有人有什么主意吗 ?如果您需要一些示例(以防万一,您不知道它必须做什么),只需询问。
答案 0 :(得分:1)
您可以使用范围技巧以“询问”的方式“保存”某些内容。
funcaoFinal xs0 ys0 = funcaoFinal' xs0 ys0
where
funcaoFinal' [] [] = []
-- the rest of your implementation here
(请注意,'
是标识符字符,因此funcaoFinal'
是与funcaoFinal
不同的名称。)
现在,如果您以相同的递归方式定义funcaoFinal'
,您将可以访问外部函数(它们是原始列表)中作为参数绑定的xs0
和ys0
。 / p>