[英]How can I fix this function
我一直在使用 Haskell 完成一项学校作业,并且一遍又一遍地遇到相同的解析错误。 我一直在网上寻找并没有解决我的问题。 任何建议将不胜感激。 这里是 function...
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)
您在链接中发布的代码与您在问题正文中发布的代码不同。
这是您的代码实际上有解析错误
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)
这有两个问题,缺少 pipe 字符|
在警卫上,您忘记在compareMax
的定义之前包含where
关键字。
这是修复了这些解析错误的代码
maxGaussNorm :: [GaussianInt] -> GaussianInt
maxGaussNorm gs = compareMax (tail gs) (head gs)
where
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)
您最初随问题发布的代码也是通过将帮助程序 function 重写为顶级 function 并包括警卫上的管道来解决解析错误的方法
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)
此实现也略有不同,因为它处理空列表而不是错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.