Haskell 如何修复此函数

Haskell 如何修复此函数,haskell,parse-error,Haskell,Parse Error,我一直在用Haskell做一个学校作业,并且一次又一次地得到相同的解析错误。我一直在网上寻找,没有找到解决问题的方法。如有任何建议,将不胜感激。这里是函数 maxGaussNorm :: [GaussianInt] -> GaussianInt maxGaussNorm [] = (0,0) maxGaussNorm gs = maxAux (tail gs) (head gs) maxAux :: [GaussianInt] -> GaussianInt -> Gaussi

我一直在用Haskell做一个学校作业,并且一次又一次地得到相同的解析错误。我一直在网上寻找,没有找到解决问题的方法。如有任何建议,将不胜感激。这里是函数

maxGaussNorm :: [GaussianInt] -> GaussianInt
maxGaussNorm [] = (0,0)
maxGaussNorm gs = maxAux (tail gs) (head gs)

maxAux :: [GaussianInt] -> GaussianInt -> GaussianInt
maxAux gs m 
      | gs == [] = m
      | (gaussNorm (head gs)) <= (gaussNorm m) = maxAux (tail gs) m
      | (gaussNorm (head gs)) > (gaussNorm m) = maxAux (tail gs) (head gs)
maxgaussnrom::[GaussianInt]->GaussianInt
maxGaussNorm[]=(0,0)
maxGaussNorm gs=maxAux(尾部gs)(头部gs)
maxAux::[GaussianInt]->GaussianInt->GaussianInt
maxAux gs m
|gs==[]=m
|(gaussnrom(头部gs))(gaussnrom m)=maxax(尾部gs)(头部gs)

您在链接中发布的代码与您在问题正文中发布的代码不同

这是您的代码,实际上有解析错误

maxGaussNorm :: [GaussianInt] -> GaussianInt
maxGaussNorm gs = compareMax (tail gs) (head gs)
    compareMax :: [GaussianInt] -> GaussianInt -> GaussianInt
    compareMax gs m
        gs == [] = m
        gaussNorm(head gs) <= gaussNorm m = compareMax (tail gs) m
        gaussNorm(head gs) > gaussNorm m = compareMax (tail gs) (head gs)
最初随问题一起发布的代码也是解析错误的解决方案,它将helper函数重写为顶级函数,并包括保护上的管道

maxGaussNorm :: [GaussianInt] -> GaussianInt
maxGaussNorm [] = (0,0)
maxGaussNorm gs = maxAux (tail gs) (head gs)

maxAux :: [GaussianInt] -> GaussianInt -> GaussianInt
maxAux gs m 
      | gs == [] = m
      | (gaussNorm (head gs)) <= (gaussNorm m) = maxAux (tail gs) m
      | (gaussNorm (head gs)) > (gaussNorm m) = maxAux (tail gs) (head gs)
maxgaussnrom::[GaussianInt]->GaussianInt
maxGaussNorm[]=(0,0)
maxGaussNorm gs=maxAux(尾部gs)(头部gs)
maxAux::[GaussianInt]->GaussianInt->GaussianInt
maxAux gs m
|gs==[]=m
|(gaussnrom(头部gs))(gaussnrom m)=maxax(尾部gs)(头部gs)

此实现也略有不同,因为它处理空列表而不是错误。

您遇到了哪些解析错误?GaussianInt是如何定义的?GaussianInt被定义为类型GaussianInt=(整数,整数),我一直得到的错误是赋值2。hs:90:18:error:parse error on input`='也许你需要一个'do'块中的'let'?e、 g.“让x=5”代替“x=5”| 90 | gs=[]=m |^这是整个文件吗?这段代码没有给出解析错误@JestynStrik不,制表符也应该可以正常工作,您只需要避免将它们与空格混合,这可能会导致不明显的错误,所以这只是我对外观正确的代码的第一个猜测。正如Potato44所说的,请在您之前的评论中发布一条错误消息,该消息说它发生在第90行。你能把第90行的内容和它两边的几行上下文放在一起吗?
maxGaussNorm :: [GaussianInt] -> GaussianInt
maxGaussNorm [] = (0,0)
maxGaussNorm gs = maxAux (tail gs) (head gs)

maxAux :: [GaussianInt] -> GaussianInt -> GaussianInt
maxAux gs m 
      | gs == [] = m
      | (gaussNorm (head gs)) <= (gaussNorm m) = maxAux (tail gs) m
      | (gaussNorm (head gs)) > (gaussNorm m) = maxAux (tail gs) (head gs)