F#和结果类型将是无限错误

时间:2015-08-12 13:47:24

标签: .net f#

我有以下递归函数:

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是一个整数数组。我需要在原始函数定义中进行哪些更改才能使其正常工作?

1 个答案:

答案 0 :(得分:4)

您需要在(...)

周围添加一些x::items

记住:函数应用程序具有最高的期限:

match v with
| x when x <> source -> ComputePath edgeTo.[x] (x::items)
....

原因

如果没有它,你最终会得到这个:

(ComputePath edgeTo.[x] x) :: items 

并且错误消息很有意义