簡體   English   中英

我該如何修復這個 function

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM