【问题标题】:Replace list of elements with elements from another list Haskell [duplicate]用另一个列表Haskell中的元素替换元素列表[重复]
【发布时间】:2021-05-19 12:29:57
【问题描述】:

我有点难以准确解释标题的含义。我想在 Haskell 中创建一个函数,它接受两个列表并返回一个列表列表,其中每个列表是通过将第一个列表中的第 i 个元素替换为第二个列表中的第 i 个元素来获得的。例如,如果给定 [1,2,3] 和 [4,5,6],它应该返回 [[4,2,3],[1,5,3],[1,2,6]]。 我尝试使用这个递归函数,它只返回一个包含所有值的列表,然后我可以将这些值分解并变成一个列表列表,但它会在途中丢失一些元素。

replace' :: [a] -> [a] ->[a]
replace' _ [y] = [y]
replace' (x:xs) (y:ys) =  y:xs ++  x: (replace' xs ys)

【问题讨论】:

  • 我们可以为您编写它,但最重要的可能是您自己增强对情况的理解,以便解决方案变得清晰。问题越清楚,解决方案就越容易。 :)

标签: list function haskell list-comprehension


【解决方案1】:

您非常接近确切的解决方案。基本上有两个问题:

  1. 您想返回一个列表列表。因此返回类型是[[a]],并且该列表的元素是列表,因此y:xs 是一个元素,而不是一个子列表;所以你用:y:xs 和它的尾巴结合起来;和

  2. 对于其余元素,您在 all 子列表前添加x,这意味着您执行mapping:

如果我们解决这两个问题,我们会得到:

replace' :: [a] -> [a] -> [[a]]
replace' [] _ = []
replace' _ [] = []
replace' (x:xs) (y:ys) = (y:xs) : map (x:) (replace' xs ys)

【讨论】:

    猜你喜欢
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2011-08-16
    • 2016-03-28
    • 1970-01-01
    相关资源
    最近更新 更多