我有以下递归函数:
let rec ComputePath v items =
match v with
| x when x <> source -> ComputePath edgeTo.[x] x::items
| s when s = source -> s::items
| _ -> items
ComputePath v [] |> Some
在我调用递归函数的第三行中,我收到以下错误:类型不匹配。在统一&#39;时,结果类型将是无限的。和一个清单&#39;。
如果我通过将方法参数转换为元组来更改方法参数,那么错误就会消失。
let rec ComputePath (v, items) =
match v with
| x when x <> source -> ComputePath (edgeTo.[x], x::items)
| s when s = source -> s::items
| _ -> items
ComputePath (v, []) |> Some
edgeTo是一个整数数组。我需要在原始函数定义中进行哪些更改才能使其正常工作?
答案 0 :(得分:4)
您需要在(...)
x::items
记住:函数应用程序具有最高的期限:
match v with
| x when x <> source -> ComputePath edgeTo.[x] (x::items)
....
(ComputePath edgeTo.[x] x) :: items
并且错误消息很有意义