使用绑定到f#模式中的标识符的值?

时间:2014-07-12 11:58:54

标签: f#

我想要一个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的出现次数

1 个答案:

答案 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)