我正在嘗試在 Haskell 中撰寫一個函式,該函式將字串和具有模式 [(String, Float)] 的串列作為輸入,并輸出分配給與我的輸入匹配的鍵字串的 Float,但我不明白是什么我做錯了。這是我的代碼:
a = [("x",1.21),("y",3.52),("z",6.72)]
val :: String -> [(String, Float)] -> Float
val x [(s,f)]
| x == s = f
它給了我錯誤
* Couldn't match type `Double' with `Float'
Expected type: [(String, Float)]
Actual type: [([Char], Double)]
* In the second argument of `val', namely `a'
In the expression: val "x" a
In an equation for `it': it = val "x" a
誰能解釋我做錯了什么以及這種型別不匹配如何有意義?
uj5u.com熱心網友回復:
的定義中存在一些問題val,而不是型別簽名:
- 保護選項并不詳盡:當 x 不等于 s 時會發生什么?
- 該
[(s,f)]部分不是串列的模式:您會經常使用變數名或模式。 - 如果在遍歷整個串列后找不到匹配項會怎樣?你會拋出一個錯誤,或者一個可能,還是回傳一個合理的默認值?
考慮這個解決方案拋出一個錯誤:``
val :: String -> [(String, Float)] -> Float
val x [] = error ("Not Found: " show x)
val x ((s,f):rest) | s==x = f
| otherwise = val x rest
如果您使用 Maybes Just f,您也??可以回傳。Nothing
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/446076.html
