用另一个列表中的元素替换元素列表 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)
您非常接近精确解。基本上有两个问题:
你要return列表列表。 return 类型因此是 [[a]]
,并且该列表的元素是列表,因此 y:xs
是一个 元素 ,而不是子列表;所以你用 :
把 y:xs
和它的尾巴结合起来;和
对于其余元素,您在 所有 子列表前加上 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)
我很难准确解释标题的含义。我想在 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)
您非常接近精确解。基本上有两个问题:
你要return列表列表。 return 类型因此是
[[a]]
,并且该列表的元素是列表,因此y:xs
是一个 元素 ,而不是子列表;所以你用:
把y:xs
和它的尾巴结合起来;和对于其余元素,您在 所有 子列表前加上
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)