Ocaml模式匹配/功能成员

时间:2015-05-16 18:01:08

标签: ocaml

以下函数正在尝试匹配(int * stmt list) list(其中stmt只是其他地方定义的类型)并返回stmt list

 let rec findinlist (r: int) (l1: (int * stmt list) list ) (l2: stmt list) =   
      (match l1 with 
      | [] -> l2
      | h:: _ when h= (r,s) -> s
      | _ :: t -> findinlist r t l2
      )    

首先,这给了我一个未绑定的值s错误,但我将如何完成此操作?

1 个答案:

答案 0 :(得分:2)

当您使用when时,它不是另一种绑定s的模式匹配。它只是一个布尔测试,需要一个布尔值(如if语句)。

也许你想要这样的东西:

let rec findinlist (r: int) (l1: (int * stmt list) list ) (l2: stmt list) =   
  (match l1 with 
  | [] -> l2
  | (r',s):: _ when r' = r -> s
  | _ :: t -> findinlist r t l2
  )