Types F#错误:预期的类型错误? 让距离(x:(浮动*浮动)):浮动= sqrt((fst x*fst x)+(snd x*snd x)) 让getClosestPair(成对:(浮点*浮点)列表)= 让可变最近=(0.0,0.0) 如果List.i为空对,则 (无限,无限) 其他的 最接近

Types F#错误:预期的类型错误? 让距离(x:(浮动*浮动)):浮动= sqrt((fst x*fst x)+(snd x*snd x)) 让getClosestPair(成对:(浮点*浮点)列表)= 让可变最近=(0.0,0.0) 如果List.i为空对,则 (无限,无限) 其他的 最接近,types,casting,f#,Types,Casting,F#,在if块中,您返回的是float*float元组,但在else块中,您正在变异最接近的变量并返回单位。这两个块必须返回相同的类型 将else块更改为: 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
块中,您返回的是
float*float
元组,但在
else
块中,您正在变异
最接近的
变量并返回
单位
。这两个块必须返回相同的类型

else
块更改为:

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
else

最近的哇。。。我真不敢相信我错过了。非常感谢你!别担心。第二双眼睛永远不会痛。
else
    closest <- pairs.[0]
    for i in pairs do
        if (distance i) < (distance closest) then closest <- i
    closest