通过元组时类型不匹配

时间:2019-03-07 23:59:38

标签: f#

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

enter image description here

谢谢

1 个答案:

答案 0 :(得分:4)

因此,您两次调用checkDist,第一次是通过传递作为单个值的feat,第二次是通过作为元组的prevMax。你有矛盾。

对类型推断发生了什么不确定时,有助于添加类型注释以阐明应该是什么(对推断引擎,对您自己以及对我们而言)。