F#错误:预计错误的类型?

时间:2016-02-18 04:54:39

标签: types casting f#

let distance (x:(float * float)): float =
    sqrt ((fst x * fst x) + (snd x * snd x))

let getClosestPair (pairs:(float * float) list) =
    let mutable closest = (0.0, 0.0)
    if List.isEmpty pairs then
        (infinity, infinity)
    else
        closest <- pairs.[0]
        for i in pairs do
            if (distance i) < (distance closest) then closest <- i

上面的函数通过浮点对列表。每一对都像笛卡尔平面上的坐标。该函数找到与原点最接近的一对。底部的for循环生成类型错误。

  

&#34;这个表达式的类型为float * float,但是这里有   输入单位&#34;

我该如何修复此错误?

1 个答案:

答案 0 :(得分:9)

if块中,您返回float * float元组,但在else块中,您正在改变closest变量并返回unit。这两个块必须返回相同的类型。

else块更改为:

else
    closest <- pairs.[0]
    for i in pairs do
        if (distance i) < (distance closest) then closest <- i
    closest

这可确保您返回closest块中else变量的最终结果,从而确保您在float * float中都返回if元组}和else路径。