以下函数接受一个列表,一个元组(a,b),其中“ a”是一个浮点数元组和一个要测试的查询。
checkDist是一个函数,它接受两个元组的浮点数,并返回所有点之间的距离。
现在,我的问题是我遇到类型不匹配错误,无法弄清原因。似乎只能将推断“ a”键入单个浮点,而不是float * float。
let intoTp lst (a, b) qry =
let rec intoTpLoop lst prevMax =
match lst with
| [] -> []
| (feat, value) :: t ->
let curr = checkDist feat qry // current max
let prev = checkDist prevMax qry // prev max
// Check to replace top
if prev < curr then
let nextMax = (feat, value)
prevMax :: intoTpLoop t nextMax
else
(feat, value) :: intoTpLoop t prevMax
intoTpLoop lst (a, b)
谢谢
答案 0 :(得分:4)
因此,您两次调用checkDist
,第一次是通过传递作为单个值的feat
,第二次是通过作为元组的prevMax
。你有矛盾。
对类型推断发生了什么不确定时,有助于添加类型注释以阐明应该是什么(对推断引擎,对您自己以及对我们而言)。