在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来查找更多匹配。
答案 0 :(得分:4)
您是否忘记了第一个和第二个参数之间的问题?
| (x, false) -> inner (s.Substring(x+1)) (x::l)