Haskell 替换列表列表中的第n项
我使用一个简单的函数将列表列表中的第n项替换为列表列表列表 输入:Haskell 替换列表列表中的第n项,haskell,Haskell,我使用一个简单的函数将列表列表中的第n项替换为列表列表列表 输入:replacenth2[“0”、“1”]、[“8”、“8”][“2”、“3”]、[“1”、“2”]、[“3”、“4”]、[“9”、“12”] 预期输出:[“2”、“3”]、[“1”、“2”]、[“0”、“1”]、[“8”、“8”]、[“9”、“12”] 目前我得到了以下代码,它不能正常工作 replaceNth n newVal (x:xs) | n == 0 = newVal:[xs] | otherwise =
replacenth2[“0”、“1”]、[“8”、“8”][“2”、“3”]、[“1”、“2”]、[“3”、“4”]、[“9”、“12”]
预期输出:[“2”、“3”]、[“1”、“2”]、[“0”、“1”]、[“8”、“8”]、[“9”、“12”]
目前我得到了以下代码,它不能正常工作
replaceNth n newVal (x:xs)
| n == 0 = newVal:[xs]
| otherwise = [x]++replaceNth (n-1) newVal xs
您能帮我修复函数吗?您的代码几乎正确,您需要将
newVal
与列表的其余部分连接起来,以便它进行类型检查。您还可以使用模式匹配而不是保护
replaceNth 0 newVal (x:xs) = newVal ++ xs
replaceNth n newVal (x:xs) = x : replaceNth (n-1) newVal xs
要完成此函数,您需要为空列表提供一个案例(如果适用)您应该始终从其预期类型开始编写函数。这样,GHC将产生更好的错误消息。我不理解期望的输出。在您的示例中,第4个子列表已被删除(而不是如您所想的第2个子列表),并且子列表的顺序已以我无法理解的方式受到干扰。