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;
我该如何修复此错误?
答案 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
路径。