用另一个列表中的元素替换元素列表 Haskell

Replace list of elements with elements from another list Haskell

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

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

您非常接近精确解。基本上有两个问题:

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

  2. 对于其余元素,您在 所有 子列表前加上 x,这意味着您执行 map平:

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

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