Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 替换列表列表中的第n项_Haskell - Fatal编程技术网

Haskell 替换列表列表中的第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 =

我使用一个简单的函数将列表列表中的第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 = [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个子列表),并且子列表的顺序已以我无法理解的方式受到干扰。