F#编译器在递归函数中抱怨无效类型

时间:2015-10-07 20:26:27

标签: recursion f#

在F#中,我试图编写一个给出两个字符串的函数,它将返回第一个字符串中第二个字符串开头的所有索引。我的功能如下:

let allIndexOf (str:string) (c:string) =
    let rec inner (s:string) l =
        match (s.IndexOf(c), (s.IndexOf(c)+1) = s.Length) with
        | (-1, _) -> l
        | (x, true) -> x::l
        | (x, false) -> inner(s.Substring(x+1) x::l)
    inner str []

问题出现在(x, false) -> inner(s.Substring(x+1) x::l)行上,编译器说预期的类型为int list但是得到了int list - > int列表。我在这做错了什么?

在这种情况下,我想用字符串的其余部分(减去匹配的部分)调用inner来查找更多匹配。

1 个答案:

答案 0 :(得分:4)

您是否忘记了第一个和第二个参数之间的问题?

    | (x, false) -> inner (s.Substring(x+1)) (x::l)