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

Why does the following code cause a "parse error (possibly incorrent indentation or mismatched brackets) at the next line of code

我正在尝试创建一个替换函数,但下面的代码在它后面的 non-commented 代码的第一行中创建了 post 标题中描述的错误。我不知道为什么会这样,所以非常感谢任何帮助。

 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,而不是替换<s>[xs]</s>。对于最后一个守卫,您正在构建一个列表,因此 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 : replace <strong>xs</strong> t r (n-1)
  | otherwise <strong>=</strong> x <strong>:</strong> replace xs t r n