我是 Haskell 編程的新手,我需要使用 Guard 根據分數列印成績。請找到下面的代碼。
當我遇到編譯器錯誤時,任何幫助將不勝感激。
Couldn't match expected type ‘Integer -> String’
with actual type ‘[Char]’
? In the expression: "MediumPass"
In an equation for ‘printMarks’:
printMarks mark
| mark >= 50 && mark <= 59 = "MediumPass"
| mark >= 60 && mark <= 69 = "High Pass"
| mark >= 80 && mark <= 100 = "Distinction"
| otherwise = error "invalid mark"
代碼:
printMarks :: Integer -> Integer -> String
printMarks mark | mark >= 50 && mark <= 59 = "MediumPass"
| mark >= 60 && mark <= 69 = "High Pass"
| mark >= 80 && mark <= 100 = "Distinction"
| otherwise = error "invalid mark"
main = do
putStrLn "Printing Grade"
print(printMarks 51)
uj5u.com熱心網友回復:
的型別printMarks應該是Integer -> String而不是Integer -> Integer -> String因為printMarks需要一個Integer并產生一個String。
printMarks :: Integer -> String
printMarks mark
| mark >= 50, mark <= 59 = "MediumPass"
| mark >= 60, mark <= 69 = "High Pass"
| mark >= 80, mark <= 100 = "Distinction"
| otherwise = error "invalid mark"
main = do
putStrLn "Printing Grade"
print(printMarks 51)
輸出
tarptaeya@Anmols-MBP Temp % runghc foo.hs
Printing Grade
"MediumPass"
在 Haskellf :: a -> b -> c中意味著如果你呼叫f一個型別的物件a,那么它將回傳一個型別的函式b -> c。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/440925.html
標籤:哈斯克尔
