传递元组时类型不匹配

Raz*_*oll 1 f#

以下函数接受一个列表、一个元组 (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)

在此输入图像描述

谢谢,

AMi*_*res 5

因此,您调用了checkDist两次,第一次传递feat的是单个值,第二次传递prevMax的是一个元组。这里面有你的矛盾。

当对类型推断发生的情况有疑问时,添加类型注释有助于澄清什么应该是什么(对于推断引擎、您自己和我们)。