如果我想添加元组列表的所有元素,我会收到以下错误
let rec addTupLst (xs: 'a * 'a list) =
match xs with
| (a, b) :: rst -> a + b + (addTupLst rst)
| _ -> 0
addTupLst [(1, 2)]
我收到了警告
错误FS0001:此表达式应具有类型
' a *'列表
但这里有类型
' b列表
是否无法以这种方式对元组列表进行模式匹配,还是会出现其他错误?
答案 0 :(得分:4)
你刚忘了一对parens
let rec addTupLst (xs: ('a * 'a) list) =
match xs with
| (a, b) :: rst -> a + b + (addTupLst rst)
| _ -> 0
addTupLst [(1, 2)]
答案 1 :(得分:2)
问题在于您将该函数声明为'a * 'a list
,但您实际想要写的是('a * 'a) list
。
这就是为什么我不喜欢常见但(IMO)不一致的方式,为某些内置类型使用前缀表示法的类型参数和其余的后缀表示法。我更喜欢将类型写为list<'a * 'a>
。