以下函数接受一个列表、一个元组 (a, b)(其中“a”是浮点元组)和一个要测试的查询。
checkDist 是一个函数,它接受两个浮点数元组并返回所有点之间的距离。
现在,我的问题是我遇到了类型不匹配错误并且无法找出原因。似乎将 infer '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)
Run Code Online (Sandbox Code Playgroud)
谢谢,
因此,您调用了checkDist两次,第一次传递feat的是单个值,第二次传递prevMax的是一个元组。这里面有你的矛盾。
当对类型推断发生的情况有疑问时,添加类型注释有助于澄清什么应该是什么(对于推断引擎、您自己和我们)。