我想要一个F#中的递归函数,签名为:string * int * char - > INT, 一个终止模式是空字符串| (“”,i,c) - > 0, 第二个应该是i = String.length s {当s是三元组中的第一个项目时
let rec myf (s, i, c) =
let lens = String.length s in
match s, i, c with
| "", i, c -> 0
| s, lens, c -> 0
| s, i, c -> (if s.[i] = c then 1 else 0) + myf(s, i+1, c)
这不起作用,因为第三种模式永远不会匹配,大概是因为第二种模式中的镜头被视为通配符。是否可以在模式中使用带有值绑定值的符号,并且模式仅与该值匹配?
PS:myf在索引> = i
中计算s中c的出现次数答案 0 :(得分:4)
您需要添加一名警卫:
let rec myf (s, i, c) =
match s, i, c with
| "", i, c -> 0
| s, i, c when s.Length = i -> 0
| s, i, c -> (if s.[i] = c then 1 else 0) + myf(s, i+1, c)