設tl一個串列,(int * float) tuples其中將每個元組中的計數表示為 int,將實際值表示為浮點數,如下所示:
let tl = [ (1 , 2.3) ; (4 , 8.9) ; (10 , 3.) ];;
val tl : (int * float) list = [(1, 2.3); (4, 8.9); (10, 3.)]
可以按如下方式提取單個值:
let ext(a,b) = b;;
val ext : 'a * 'b -> 'b = <fun>
ext (1 , 3.);;
- : float = 3.
現在我想撰寫一個函式來提取和添加串列元組內的所有浮點數。我嘗試使用遞回模式匹配函式來做到這一點,但我不明白為什么它對我是一個完整的初學者不起作用。
let rec sum lst = function
[] -> 0.0
| (a,h) :: (b,t) -> h . sum (b,t);;
Error: This pattern matches values of type 'a * 'b
but a pattern was expected which matches values of type ('c * 'd) list
uj5u.com熱心網友回復:
代碼有兩個問題:
sum接受一個引數lst,然后它回傳一個function. 您要么要洗掉lst引數,要么要替換function為match lst with.您將串列的尾部匹配為元組而不是串列。
固定代碼:
let rec sum = function
[] -> 0.0
| (a, h) :: tl -> h . sum tl;;
或者,如果您想使用match:
let rec sum lst = match lst with
[] -> 0.0
| (a, h) :: tl -> h . sum tl;;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/486354.html
上一篇:鏈接到嵌套字典的元組串列
下一篇:比較兩個二叉搜索樹
