[英]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.