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
Run Code Online (Sandbox Code Playgroud)
上面的函数通过浮点对列表.每一对都像笛卡尔平面上的坐标.该函数找到与原点最接近的一对.底部的for循环生成类型错误.
"这个表达式预计有float*float类型,但这里有类型单位"
我该如何解决这个错误?
在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
Run Code Online (Sandbox Code Playgroud)
这确保您正在返回的最终结果closest在变量else块,这将反过来确保您正在返回一个float * float在两个元组if和else路径.