Recursion 尝试在OCaml中使用match语句来编写一个函数,该函数检查元素是否在列表中

Recursion 尝试在OCaml中使用match语句来编写一个函数,该函数检查元素是否在列表中,recursion,ocaml,Recursion,Ocaml,我是OCaml的新手,正在努力处理比赛。我想写一个函数,它接受一个列表和一个值,如果该值在该列表中,则返回true;如果不在该列表中,则返回false。这是我的想法,但我正在努力让它发挥作用 let rec contains xs x = match xs with | [] -> false | z :: zs -> match x with | z -> true | _ ->

我是OCaml的新手,正在努力处理比赛。我想写一个函数,它接受一个列表和一个值,如果该值在该列表中,则返回true;如果不在该列表中,则返回false。这是我的想法,但我正在努力让它发挥作用

    let rec contains xs x =
      match xs with
      | [] -> false
      | z :: zs ->
        match x with
        | z -> true
        | _ -> contains zs x

当您使用标识符作为模式时,您将把匹配的值绑定到该标识符。即

match x with
| z -> true
x
的值绑定到名称
z
。您还将收到一条关于
z
\ucode>分支未使用的警告

您也不需要第二个图案匹配,因为它可以折叠成第一个:

let rec contains xs x =
  match xs with
  | [] -> false
  | z :: _ when z = x -> true
  | _ :: zs -> contains zs x

谢谢我只使用了两个案例的模式匹配,所以我甚至没有意识到你可以有两个以上的案例。