F# F“和类型推断:”;int list";不支持“+&引用;
为什么下面的代码会产生错误F# F“和类型推断:”;int list";不支持“+&引用;,f#,type-inference,F#,Type Inference,为什么下面的代码会产生错误 let mult a b = a * b let sum a b = a + b 第二个let生成编译错误: 为类型推断变量应用默认类型“int list”时,类型约束不匹配。类型“int列表”不支持任何名为“+”的操作符,考虑添加其他类型约束 我不明白。为什么它假设我正在输入一个列表 完整列表: let sampleTimeSeries = dict [ "20110131", 1.5; "20110228", 1.5; "20110331",
let mult a b = a * b
let sum a b = a + b
第二个let生成编译错误:
为类型推断变量应用默认类型“int list”时,类型约束不匹配。类型“int列表”不支持任何名为“+”的操作符,考虑添加其他类型约束
我不明白。为什么它假设我正在输入一个列表
完整列表:
let sampleTimeSeries =
dict [
"20110131", 1.5;
"20110228", 1.5;
"20110331", 1.5;
"20110431", 1.5;
"20110531", 1.5;
]
// Recursive reduce function
// func : The function to apply
// terminatingvalue : The terminating value
// sequence : The list to apply the value on.
let rec reduce func sequence terminatingValue:int =
match sequence with
| [] -> terminatingValue
| h::t -> func h (reduce func t terminatingValue)
let mult a b = a * b
let sum a b = a + b + 0
一旦我在sum函数的末尾添加了一个0,它就正确地编译了。在声明的末尾添加一个0有助于编译器推断
sum
函数的返回类型:
let mult a b = a * b
let sum a b = a + b + 0
对我来说,F#2.0.0.0不是一个错误-也许您有一些早期的代码导致了错误?问题可能在于此代码段下面的代码,其中使用了
sum
。更新后的代码在fsi
和fsc
中仍然很好-您确定这是给出错误的代码吗?它们只是声明。您实际在哪里使用sampleTimeSeries
、reduce
、mult
和sum
?请发布一个完整的例子。我知道它们只是声明。声明给出了如上所述的错误。似乎将0添加到要添加的元素列表的末尾可以让编译器正确推断int的返回类型。可能这还不清楚。我不认为这是真正的答案-这里还有其他一些潜在问题导致了问题。虽然这是可行的,但它不应该是必需的,并且所有发布的示例运行良好,而不需要额外的0