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