【问题标题】:Iterate through 2 list in Haskell [closed]遍历Haskell中的2个列表[关闭]
【发布时间】:2019-12-15 10:32:28
【问题描述】:

我陷入了一个练习中,好吧,基本上,如果给定 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,它只取我们想要放入列表的东西,不要对这个函数做大小写。 我的问题是:我知道ofc这个代码/递归没有做我们想要的,因为它没有保存原始列表以便能够在 xs == [] 之后继续搜索,我不知道我怎么能在Haskell 保存该列表并再次遍历它,我没有看到这个问题的另一种可能性。有人有什么主意吗 ?如果您需要一些示例(以防您不明白它必须做什么),请询问。

【问题讨论】:

标签: haskell


【解决方案1】:

您可以使用范围技巧按照您要求的方式“保存”某些内容。

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

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

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

【讨论】:

  • 没错,谢谢!我从没想过要使用 where 子句,这很合适,再次感谢。
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2018-09-09
  • 1970-01-01
  • 2019-12-30
  • 2019-03-17
  • 2023-03-09
相关资源
最近更新 更多