以下函数正在尝试匹配(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错误,但我将如何完成此操作?
答案 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
)