为什么以下代码在下一行代码中导致"解析错误(可能是不正确的缩进或不匹配的括号)



我正在尝试创建一个替换函数,下面的代码在它后面的第一行未注释代码中创建了帖子标题中描述的错误。我不知道为什么会发生这种情况,所以如果有任何帮助,我们将不胜感激。

replace [] t r n = []
replace [] _ _ _ = []
replace xs _ _ 0 = xs
replace (x:xs) t r n
| x == t = r:(replace [xs] t r (n-1))
| otherwise x (replace [xs] t r n)

这里有一些问题:定义的所有部分都应该从同一列开始,所以应该取消第一行之后的行。此外,您需要在otherwise之后写一个=xs是一个列表,所以用replace xs而不是replace[xs]调用replace。对于最后一个保护,您正在构建一个列表,因此是x : (…),而不是x (…)。第二条也没有多大意义,因为它相当于第一条。

因此,您可以将其实现为:

replace :: (Integral n, Eq a) => [a] -> a -> a -> n -> [a]
replace [] _ _ _ = []
replace xs _ _ 0 = xs
replace (x:xs) t r n
| x == t = r : replacexst r (n-1)
| otherwise=x:replace xs t r n

相关内容

  • 没有找到相关文章

最新更新